macOS i Linux
findImplementacja BSD w systemie macOS różni się od funkcji wyszukiwania GNU - jest zgodna zarówno z wyszukiwaniem BSD, jak i GNU. Zacznij od implementacji globalnej, używając -namei -ofor or - Umieść tę funkcję w swoim .bashrcpliku:
pyclean () {
find . -type f -name '*.py[co]' -delete -o -type d -name __pycache__ -delete
}
Następnie cddo katalogu, który chcesz wyczyścić rekurencyjnie, i wpisz pyclean.
Tylko do wyszukiwania GNU
To jest tylko znalezisko GNU (tj. Linux), ale wydaje mi się, że jest trochę ładniejsze z wyrażeniem regularnym:
pyclean () {
find . -regex '^.*\(__pycache__\|\.py[co]\)$' -delete
}
Dowolna platforma, korzystająca z Pythona 3
W systemie Windows prawdopodobnie nawet nie masz find. Prawdopodobnie masz jednak Python 3, który począwszy od 3.4 ma wygodny pathlibmoduł:
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__')]"
-BFlaga mówi Python nie pisać .pycplików. (Zobacz także PYTHONDONTWRITEBYTECODEzmienną środowiskową).
Powyższe nadużycia zawierają listę składni do zapętlenia, ale podczas używania python -cstyl jest raczej drugorzędnym problemem. Alternatywnie możemy nadużyć (na przykład) __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()"
Krytyka odpowiedzi
Najlepsza odpowiedź mówiła:
find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf
Wydawałoby się, że jest to mniej wydajne, ponieważ wykorzystuje trzy procesy. findprzyjmuje wyrażenie regularne, więc nie potrzebujemy osobnego wywołania grep. Podobnie stało -delete, więc nie ma potrzeby oddzielnego wywołanie rm-I przeciwnie do komentarza tutaj, to będzie usuwać niepuste katalogi, tak długo, jak się opróżniane dzięki regularnym meczu ekspresji.
Ze strony podręcznika xargs:
find /tmp -depth -name core -type f -delete
Znajdź pliki o nazwie core w katalogu / tmp lub poniżej i usuń je, ale wydajniej niż w poprzednim przykładzie (ponieważ unikamy konieczności używania fork (2) i exec (2) do uruchomienia rm i nie potrzebujemy dodatkowy proces xargs).
*__pycache__,*.pyc*i to nie rozróżnia plików i katalogów. Większość wygenerowanychrmpoleceń będzie również zbędna.