Волшебство Unix, удалить все файлы .pyc из дерева каталогов?

11

Есть ли быстрый способ удаления всех .pyc файлов из дерева каталогов?

Interstar
источник

Ответы:

28

Если у вас есть GNU найти, то вы, вероятно, хотите

find <directory name> -name '*.pyc' -delete

Если вам нужно что-то портативное, вам лучше

find <directory name> -name '*.pyc' -exec rm {} \;

Если скорость важна, и у вас есть GNU find и GNU xargs, тогда

find <directory name> -name '*.pyc' -print0|xargs -0 -p <some number greater than 1> rm

Однако это вряд ли даст вам большую скорость, так как вы будете в основном ожидать ввода-вывода.

Киан
источник
идеально ... спасибо. Я всегда забываю об этом xargs
Interstar
2
На всякий случай, если у меня есть файлы с пробелами в именах, я привык всегда использовать -print0 и "xargs -0".
Пол Томблин
Вы совершенно правы, должны были подумать об этом изначально. Отредактировано, чтобы отразить это.
Cian
4
Вы также можете напрямую использовать «-delete» вместо «-print0 | xargs -0 rm '. Но это правда, что эта опция присутствует не во всех версиях 'find'.
Ролаф
6

используя команду find:

find /path/to/start -name '*.pyc' -exec rm -f {} \;
slubman
источник
Это слишком медленно. Использование xargs быстрее, или, если ваша версия find поддерживает это, измените " \;" в конце на " +".
Приостановлено до дальнейшего уведомления.
1
Это может быть немного медленнее - он запускает «rm» один раз для каждого файла, а не пакетирует их - но это самый переносимый способ сделать это. ОП не сказал, какой тип Unix он использовал, и в Solaris все еще нет функции -print0.
Кенстер
1
+1, OP сказал, что Unix не Linux, это лучшее портативное решение.
theotherreceive
Я думаю, что это решение является единственным разрешением для удаления тонны файлов, если я не ошибаюсь, использование xargs может привести к слишком длинной ошибке в командной строке. +1, это мой выбор с годами тоже.
drAlberT
Если вы используете make-файл для сборки своего проекта, вы можете добавить это в целевой файл «clean».
Том Ньютон,
1

перейдите к началу дерева каталогов:

находить . -name '* .pyc' | xargs rm -f

Гарри Хартхилл
источник
Это не обязательно cd, просто поместите верхний каталог в findкоманду (вместо «точка»).
Приостановлено до дальнейшего уведомления.
Это не обрабатывает пробелы вообще.
Cian