macOS ve Linux
BSD'lerin find
MacOS üzerinde uygulama GNU find farklıdır - bu BSD ve GNU bulmak hem uyumludur. Kullanarak, bir globbing uygulanması ile başlayın -name
ve -o
için ya - da bu işlevi koyun .bashrc
dosyası:
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 pathlib
modü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__')]"
-B
Bayrak yazmak için değil Python söyler .pyc
dosyaları. (Ayrıca bkz.PYTHONDONTWRITEBYTECODE
Ortam değişkeni.)
Yukarıdaki ihlaller döngü için kavrayışları listeler, ancak kullanırken python -c
stil 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. find
düzenli bir ifade alır, bu yüzden ayrı bir çağrıya ihtiyacımız yoktur grep
. Benzer şekilde, -delete
ayrı 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 xargs
adam 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şturulanrm
komutların çoğu gereksiz olacaktır.