Есть несколько возможных причин для этого.
1)
Вы сказали, что нужно удалять только каталоги ( -type d
), и в этих каталогах по-прежнему есть файлы.
2)
Ваши каталоги содержат только другие каталоги, поэтому -type d
они позаботятся о проблеме содержимого. Однако вы используете OS-X, который в значительной степени основан на FreeBSD, и FreeBSD find
по умолчанию будет обрабатывать каталог до его содержимого.
Однако -depth
существует возможность решить эту проблему, указав find
обработать каталог после его содержимого.
find ~ -name __pycache__ -type d -ls -delete -depth
Эта проблема не существует в Linux, потому что -delete
опция неявно включает -depth
.
FreeBSD man 1 find
:
-depth Always true; same as the non-portable -d option. Cause find to
perform a depth-first traversal, i.e., directories are visited in
post-order and all entries in a directory will be acted on before
the directory itself. By default, find visits directories in
pre-order, i.e., before their contents. Note, the default is not
a breadth-first traversal.
GNU man 1 find
:
-depth Process each directory's contents before the directory itself. The -delete
action also implies -depth.
find ~ -path '*/__pycache__*' -delete
или, вероятно,find ~ -path '*/__pycache__/*' -o -name __pycache__ -delete
быть безопасной.