macOS & Linux
findImplementasi BSD pada macOS berbeda dari GNU find - ini kompatibel dengan BSD dan GNU find. Mulailah dengan implementasi globbing, gunakan -namedan -ountuk atau - Letakkan fungsi ini di .bashrcfile Anda :
pyclean () {
find . -type f -name '*.py[co]' -delete -o -type d -name __pycache__ -delete
}
Kemudian cdke direktori yang ingin Anda bersihkan secara rekursif, dan ketik pyclean.
GNU hanya menemukan
Ini adalah solusi GNU find, only (yaitu Linux), tapi saya merasa ini sedikit lebih baik dengan regex:
pyclean () {
find . -regex '^.*\(__pycache__\|\.py[co]\)$' -delete
}
Platform apa pun, menggunakan Python 3
Di Windows, Anda mungkin tidak memilikinya find. Namun, Anda mungkin memiliki Python 3, yang dimulai pada 3.4 memiliki pathlibmodul yang mudah digunakan :
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__')]"
The -Bbendera memberitahu Python untuk tidak menulis .pycfile. (Lihat juga PYTHONDONTWRITEBYTECODEvariabel lingkungan.)
Daftar pelanggaran di atas memahami perulangan, tetapi saat menggunakan python -c, gaya agak menjadi perhatian sekunder. Sebagai alternatif, kami dapat menyalahgunakan (misalnya) __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()"
Kritik atas jawaban
Jawaban teratas biasanya mengatakan:
find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf
Ini tampaknya kurang efisien karena menggunakan tiga proses. findmengambil ekspresi reguler, jadi kami tidak perlu doa terpisah grep. Demikian pula, sudah -delete, jadi kita tidak perlu doa terpisah rm- dan bertentangan dengan komentar di sini, itu akan menghapus direktori tidak kosong selama mereka dikosongkan berdasarkan pertandingan ekspresi reguler.
Dari xargshalaman manual:
find /tmp -depth -name core -type f -delete
Temukan file dengan nama core di atau di bawah direktori / tmp dan hapus, tetapi lebih efisien daripada di contoh sebelumnya (karena kita menghindari kebutuhan untuk menggunakan fork (2) dan exec (2) untuk meluncurkan rm dan kita tidak memerlukan proses xargs ekstra).
*__pycache__,*.pyc*dan itu tidak membedakan antara file dan direktori. Sebagian besarrmperintah yang dihasilkan juga akan berlebihan.