Как удалить все файлы .pyc из проекта? - PullRequest
633 голосов
/ 24 апреля 2009

Я переименовал некоторые файлы в довольно большом проекте и хочу удалить файлы .pyc, которые они оставили. Я пробовал скрипт bash:

 rm -r *.pyc

Но это не повторяется по папкам, как я думал. Что я делаю не так?

Ответы [ 18 ]

1089 голосов
/ 24 апреля 2009
find . -name "*.pyc" -exec rm -f {} \;
972 голосов
/ 29 мая 2009

find . -name '*.pyc' -delete

Конечно, самый простой.

82 голосов
/ 02 декабря 2012

В текущей версии Debian у вас есть скрипт pyclean, который находится в пакете python-minimal.

Простое использование:

pyclean .
77 голосов
/ 07 апреля 2014

Добавить к вашему ~/.bashrc:

pyclean () {
        find . -type f -name "*.py[co]" -delete
        find . -type d -name "__pycache__" -delete
}

При этом удаляются все файлы .pyc и .pyo и каталоги __pycache__. Это также очень быстро.

Использование просто:

$ cd /path/to/directory
$ pyclean
51 голосов
/ 25 апреля 2009

Если вы используете bash> = 4.0 (или zsh)

rm **/*.pyc

Обратите внимание, что */*.pyc выбирает все .pyc файлы в непосредственных подкаталогах первого уровня, а **/*.pyc рекурсивно сканирует все дерево каталогов. Например, foo/bar/qux.pyc будет удалено rm **/*.pyc, но не */*.pyc.

Параметры оболочки globstar должны быть включены. Для включения globstar:

shopt -s globstar

и проверить его статус:

shopt globstar
30 голосов
/ 25 апреля 2009

Я использовал для этого псевдоним:

$ which pycclean

pycclean is aliased to `find . -name "*.pyc" | xargs -I {} rm -v "{}"'
17 голосов
/ 25 апреля 2009
find . -name '*.pyc' -print0 | xargs -0 rm

Поиск рекурсивно ищет * .pyc файлы. Xargs берет этот список имен и отправляет его в rm. -Print0 и -0 говорят двум командам разделять имена файлов нулевыми символами. Это позволяет ему корректно работать с именами файлов, содержащими пробелы, и даже с именем файла, содержащим новую строку.

Решение с -exec работает, но оно раскручивает новую копию rm для каждого файла. На медленной системе или с большим количеством файлов это займет слишком много времени.

Вы также можете добавить еще пару аргументов:

find . -iname '*.pyc' -print0 | xargs -0 --no-run-if-empty  rm

iname добавляет нечувствительность к регистру, как * .PYC. No-run-if-empty не позволяет получить сообщение об ошибке от rm, если у вас нет таких файлов.

16 голосов
/ 23 октября 2015

Для пользователей Windows:

del /S *.pyc
15 голосов
/ 14 июля 2014
$ find . -name '*.pyc' -delete

Это быстрее, чем

$ find . -name "*.pyc" -exec rm -rf {} \;
10 голосов
/ 14 апреля 2017

Кроме того, люди обычно хотят рекурсивно удалить все файлы *.pyc, *.pyo и __pycache__ в текущем каталоге.

Команда:

find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...