macOS ve Linux
BSD'lerin findMacOS üzerinde uygulama GNU find farklıdır - bu BSD ve GNU bulmak hem uyumludur. Kullanarak, bir globbing uygulanması ile başlayın -nameve -oiçin ya - da bu işlevi koyun .bashrcdosyası:
pyclean () {
find . -type f -name '*.py[co]' -delete -o -type d -name __pycache__ -delete
}
Ardından cd, yinelemeli olarak temizlemek istediğiniz dizine gidin ve yazınpyclean .
Yalnızca GNU bulma
Bu bir GNU bulma, sadece (yani Linux) çözümüdür, ancak normal ifadeyle biraz daha hoş olduğunu düşünüyorum:
pyclean () {
find . -regex '^.*\(__pycache__\|\.py[co]\)$' -delete
}
Python 3 kullanan herhangi bir platform
Windows'da, muhtemelen yoktur find. Bununla birlikte, muhtemelen 3.4'ten başlayarak uygun pathlibmodüle sahip Python 3'e sahipsiniz :
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__')]"
-BBayrak yazmak için değil Python söyler .pycdosyaları. (Ayrıca bkz.PYTHONDONTWRITEBYTECODE Ortam değişkeni.)
Yukarıdaki ihlaller döngü için kavrayışları listeler, ancak kullanırken python -cstil oldukça ikincil bir endişedir. Alternatif olarak kötüye kullanabiliriz (örneğin) __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()"
Bir yanıtın eleştirisi
İlk cevap şöyle derdi:
find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf
Üç süreç kullandığından, bu daha az verimli görünmektedir. finddüzenli bir ifade alır, bu yüzden ayrı bir çağrıya ihtiyacımız yoktur grep. Benzer şekilde, -deleteayrı bir çağrıya ihtiyacımız yok rm- ve buradaki bir yorumun aksine , onlar düzenli ifade maçın sayesinde boşaltılmış olsun sürece boş olmayan dizinleri silin.
Gönderen xargsadam sayfası:
find /tmp -depth -name core -type f -delete
/ Tmp dizininde veya altında core adlı dosyaları bulun ve önceki örnekten daha verimli bir şekilde silin (çünkü rm'yi başlatmak için fork (2) ve exec (2) kullanma ihtiyacından kaçınırız ve ekstra xargs işlemi).
*__pycache__,*.pyc*ve dosyaları ve dizinleri arasında ayrım yapmaz. Oluşturulanrmkomutların çoğu gereksiz olacaktır.