macOS та Linux
findРеалізація BSD на macOS відрізняється від пошуку GNU - це сумісно як з BSD, так і з GNU. Почніть з глобальної реалізації, використовуючи -nameта -oдля або - Покладіть цю функцію у свій .bashrcфайл:
pyclean () {
find . -type f -name '*.py[co]' -delete -o -type d -name __pycache__ -delete
}
Потім cdв каталог, який потрібно рекурсивно очистити, і введіть pyclean.
GNU - лише знахідка
Це єдине (тобто Linux) рішення GNU, але я вважаю, що це трохи приємніше з регулярним виразом:
pyclean () {
find . -regex '^.*\(__pycache__\|\.py[co]\)$' -delete
}
Будь-яка платформа, використовуючи Python 3
У Windows, напевно, навіть немає find. Однак у вас, мабуть, є Python 3, який починаючи з 3.4 має зручний pathlibмодуль:
python3 -Bc "import pathlib; [p.unlink() for p in pathlib.Path('.').rglob('*.py[co]')]"
python3 -Bc "import pathlib; [p.rmdir() for p in pathlib.Path('.').rglob('__pycache__')]"
-BПрапор говорить Python не писали .pycфайли. (Див. Також PYTHONDONTWRITEBYTECODEзмінну середовища.)
Вищезгадані зловживання перелічують розуміння циклічного циклу, але при їх використанні python -cстиль є досить другою проблемою. Або ми можемо зловживати (наприклад) __import__:
python3 -Bc "for p in __import__('pathlib').Path('.').rglob('*.py[co]'): p.unlink()"
python3 -Bc "for p in __import__('pathlib').Path('.').rglob('__pycache__'): p.rmdir()"
Критика відповіді
Верхня відповідь, яку говорили:
find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf
Це здається менш ефективним, оскільки використовує три процеси. findприймає регулярний вираз, тому нам не потрібен окремий виклик grep. Так само є -delete, тому нам не потрібен окремий виклик - rmі всупереч коментарю тут, він буде видаляти непорожні каталоги до тих пір, поки вони будуть випорожнені внаслідок регулярного збігу виразів.
Із xargsчоловічої сторінки:
find /tmp -depth -name core -type f -delete
Знайдіть файли з ім’ям ядра в каталозі / tmp або нижче та видаліть їх, але ефективніше, ніж у попередньому прикладі (адже ми уникаємо необхідності використовувати fork (2) та exec (2) для запуску rm, і нам не потрібен додатковий процес xargs).
*__pycache__,*.pyc*і він не розрізняє файли та каталоги. Більшість створенихrmкоманд також буде зайвою.