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


11

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

Ответы:


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 {} \;

Это слишком медленно. Использование xargs быстрее, или, если ваша версия find поддерживает это, измените " \;" в конце на " +".
Приостановлено до дальнейшего уведомления.

1
Это может быть немного медленнее - он запускает «rm» один раз для каждого файла, а не пакетирует их - но это самый переносимый способ сделать это. ОП не сказал, какой тип Unix он использовал, и в Solaris все еще нет функции -print0.
Кенстер

1
+1, OP сказал, что Unix не Linux, это лучшее портативное решение.
theotherreceive

Я думаю, что это решение является единственным разрешением для удаления тонны файлов, если я не ошибаюсь, использование xargs может привести к слишком длинной ошибке в командной строке. +1, это мой выбор с годами тоже.
drAlberT

Если вы используете make-файл для сборки своего проекта, вы можете добавить это в целевой файл «clean».
Том Ньютон,

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.