найдите - удаляют, не удаляет непустые каталоги

Если Вы хотите поместить файлы там, то или изменение полномочия так, чтобы у ВАС был доступ для записи, или используют sudo. Ничего никогда не устанавливайте в своей системе к полномочиям 777. Это читается/пишется/выполняется из любого. Теперь, когда может быть Ваша частная система, но можно однажды работать над производственными системами. Вы не хотите изучать дурные привычки. НИКОГДА не используйте тот набор полномочий ни для какого файла.

Просто хочу, чтобы Вы узнали, что безопасные привычки, не пробуя ко лбу бьют Вас.

32
09.03.2017, 15:24
2 ответа

найти флаг -delete работает аналогично rmdir при удалении каталогов. Если каталог не является пустым по достижении его, то он не может быть удален.

Сначала необходимо очистить каталог. Так как Вы указываете -тип d, то find не сделает этого за Вас.

Вы можете решить эту проблему, выполнив два прохода: сначала удалите все внутри каталога с именем __pycache__, затем удалите все каталоги с именем __pycache__:

find ~ -path '*/__pycache__/*' -delete
find ~ -type d -name '__pycache__' -empty -delete

Немного менее жестко контролируемые, но в одной строке:

find ~ -path '*/__pycache__*' -delete

Это удалит все, что находится внутри вашего дома и имеет __pycache__ в своем пути.

36
27.01.2020, 19:37

Есть пара потенциальных причин для этого.

1) Вы сказали ему удалять только каталоги (-тип d), а внутри этих каталогов все еще находятся файлы.

2) Ваши каталоги содержат только другие каталоги, поэтому -тип d позаботится о содержании. Однако, вы используете OS-X, которая в значительной степени основана на FreeBSD, и FreeBSD find по умолчанию обработает каталог перед его содержимым.
Однако существует возможность -depth решить эту проблему, сообщив find для обработки каталога после его содержимого.

find ~ -name __pycache__ -type d -ls -delete -depth

На linux этой проблемы не существует, так как опция -delete неявно включает -depth.

FreeBSD man 1 находит:

 -depth Always true; то же самое, что и непостоянная опция -d. Поиск причины
 выполнить глубинный обход, т.е. каталоги посещаются в
 постзаказ и все записи в каталоге будут обработаны до того, как
 сам каталог. По умолчанию, найдите каталоги посещений в
 предварительный заказ, т.е. до их содержания. Обратите внимание, что по умолчанию
 первый широтный обход.

GNU man 1 find:

 -depth Обрабатывает содержимое каждого каталога перед самим каталогом. -делете
 Действие также подразумевает -глубокость.
6
27.01.2020, 19:37

Теги

Похожие вопросы