macOS e Linux
L' findimplementazione di BSD su macOS è diversa da GNU find - questo è compatibile con BSD e GNU find. Inizia con un'implementazione globbing, usando -namee -oper o - Inserisci questa funzione nel tuo .bashrcfile:
pyclean () {
find . -type f -name '*.py[co]' -delete -o -type d -name __pycache__ -delete
}
Quindi cdnella directory che si desidera pulire in modo ricorsivo e digitare pyclean.
GNU trova solo
Questa è una soluzione GNU find, only (ie Linux), ma penso che sia un po 'più piacevole con regex:
pyclean () {
find . -regex '^.*\(__pycache__\|\.py[co]\)$' -delete
}
Qualsiasi piattaforma, usando Python 3
Su Windows, probabilmente non hai nemmeno find. Tuttavia, probabilmente hai Python 3, che a partire dalla 3.4 ha il comodo pathlibmodulo:
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__')]"
La -Bbandiera dice a Python di non scrivere .pycfile. (Vedi anche la PYTHONDONTWRITEBYTECODEvariabile d'ambiente.)
Gli abusi di cui sopra elencano le comprensioni per il looping, ma quando si utilizza python -c, lo stile è piuttosto una preoccupazione secondaria. In alternativa, potremmo abusare (ad esempio) __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()"
Critica di una risposta
La risposta principale diceva:
find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf
Ciò sembrerebbe meno efficiente perché utilizza tre processi. findprende un'espressione regolare, quindi non abbiamo bisogno di una chiamata separata di grep. Allo stesso modo, si è -delete, quindi non abbiamo bisogno di un'invocazione separata rmcontrario -e per un commento qui, sarà eliminare le directory non vuote fintanto che vengono svuotati in virtù del match espressione regolare.
Dalla xargspagina man:
find /tmp -depth -name core -type f -delete
Trova i file denominati core all'interno o sotto la directory / tmp ed eliminali, ma in modo più efficiente rispetto all'esempio precedente (perché evitiamo la necessità di usare fork (2) ed exec (2) per avviare rm e non abbiamo bisogno del processo xargs extra).
*__pycache__,*.pyc*e non distinguere tra file e directory. Anche la maggior parte deirmcomandi generati sarà superflua.