4

После ошибочного ввода пути при использовании cp я, кажется, случайно скопировал папку в себя рекурсивно, и теперь я не могу удалить эту папку, используя rm -rf или Trash в Mac OS X Finder . Файл находится на загрузочном диске (следовательно, HFS+J).

Выходные данные из rm -rf - это просто повторение Directory not empty , например:

rm: o/old/old/old/old/old/old/old/old: Directory not empty
rm: o/old/old/old/old/old/old/old: Directory not empty
rm: o/old/old/old/old/old/old: Directory not empty
rm: o/old/old/old/old/old: Directory not empty
rm: o/old/old/old/old: Directory not empty
rm: o/old/old/old: Directory not empty
rm: o/old/old: Directory not empty
rm: o/old: Directory not empty
rm: o: Directory not empty

Что мне сделать, чтобы удалить эту папку?

Как вы видите, я попытался переименовать первую папку, чтобы сократить путь к файлу. Папка перемещается в Trash , но не удаляется из-за следующего диалогового окна с предупреждением:

The operation can’t be completed because the item is in use.

3 ответа3

3

Пытаться

find o -delete

или же

find o -depth -delete

-depth указывает find сначала перейти в самую глубокую часть дерева каталогов, а затем вернуться обратно.  Страница man говорит: «Использование -delete автоматически включает опцию -depth ». Если ваша версия find не поддерживает -delete , попробуйте

find o -depth -exec rm -rf {} ";"
2

Ну, у меня была та же проблема. Я решил это, укоротив название каждого из вложенных каталогов.

Поскольку это одноразовая проблема, я не пытался придумать какую-нибудь умную магию сценариев. Я просто написал

for FILE in $(ls); do mv $FILE a; cd a; done

в оболочке, затем нажмите стрелку вверх, чтобы снова вызвать команду и вернуться. Одним пальцем на каждой клавише я просто быстро повторил два нажатия клавиш до самой глубокой директории. Затем cd ~ и cd к корню неисправного дерева. Обычный rm -r теперь сделал свою работу.

1

Если вы получаете это, это очевидно. Поскольку вы не можете вернуться глубоко вниз, вы должны переместить каталог на один уровень глубже, всего на один уровень вверх. После этого остается каталог с глубиной "один", который можно удалить.

Предположим, у вас есть "бесконечный" каталог a/a/a/a/a/a/a/....

тогда вы делаете:

mv a/a b
rm -r a
mv b/a a
rm -r b

Повторяйте, пока не останется ни одного каталога.

Следующий скрипт делает это: (вы должны нажать ctrl-c после его завершения)

while [ true ]; do mv a/a b; rm -r a; mv b/a a; rm -r b; done

Поскольку имена идентичны, сценарии «переворачиваются» между двумя временными именами.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .