macOS & Linux
Việc find
triể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 -name
và -o
cho hoặc - Đặt chức năng này trong .bashrc
tệ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ó pathlib
mô-đ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 -B
lá cờ nói với Python không để viết .pyc
tập tin. (Xem thêm PYTHONDONTWRITEBYTECODE
biế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. find
có 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 rm
và 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ừ xargs
trang 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ácrm
lệnh được tạo cũng sẽ là thừa.