macOS & Linux
Việc findtriển khai BSD trên macOS khác với GNU find - điều này tương thích với cả BSD và GNU find. Bắt đầu với việc triển khai toàn cầu, sử dụng -namevà -ocho hoặc - Đặt chức năng này trong .bashrctệp của bạn :
pyclean () {
find . -type f -name '*.py[co]' -delete -o -type d -name __pycache__ -delete
}
Sau đó cdđến thư mục bạn muốn làm sạch đệ quy và gõ pyclean.
GNU chỉ tìm
Đây là một giải pháp GNU find, only (tức là Linux), nhưng tôi cảm thấy nó đẹp hơn một chút với biểu thức chính quy:
pyclean () {
find . -regex '^.*\(__pycache__\|\.py[co]\)$' -delete
}
Bất kỳ nền tảng nào, sử dụng Python 3
Trên Windows, bạn có thể thậm chí không có find. Tuy nhiên, bạn có thể có Python 3, bắt đầu từ 3.4 có pathlibmô-đun thuận tiện :
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__')]"
Các -Blá cờ nói với Python không để viết .pyctập tin. (Xem thêm PYTHONDONTWRITEBYTECODEbiến môi trường.)
Các lạm dụng ở trên liệt kê sự hiểu biết cho vòng lặp, nhưng khi sử dụng python -c, phong cách là một mối quan tâm thứ yếu. Ngoài ra, chúng tôi có thể lạm dụng (ví dụ) __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()"
Phê bình một câu trả lời
Câu trả lời hàng đầu được sử dụng để nói:
find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf
Điều này dường như sẽ kém hiệu quả hơn vì nó sử dụng ba quy trình. findcó một biểu thức chính quy, vì vậy chúng ta không cần một lệnh gọi riêng grep. Tương tự như vậy, nó không có -delete, vì vậy chúng ta không cần một lời mời riêng biệt rmvà ngược lại với một nhận xét ở đây, nó sẽ xóa các thư mục không trống miễn là chúng bị xóa bởi tính phù hợp của biểu thức chính quy.
Từ xargstrang người đàn ông:
find /tmp -depth -name core -type f -delete
Tìm các tệp có tên core trong hoặc bên dưới thư mục / tmp và xóa chúng, nhưng hiệu quả hơn trong ví dụ trước (vì chúng tôi tránh việc phải sử dụng fork (2) và exec (2) để khởi chạy rm và chúng tôi không cần quá trình xargs thêm).
*__pycache__,*.pyc*và nó không phân biệt giữa các tập tin và thư mục. Hầu hết cácrmlệnh được tạo cũng sẽ là thừa.