macOS et Linux
L' find
implémentation de BSD sur macOS est différente de GNU find - elle est compatible avec BSD et GNU find. Commencez par une implémentation de globbing, en utilisant -name
et le -o
for ou - Mettez cette fonction dans votre .bashrc
fichier:
pyclean () {
find . -type f -name '*.py[co]' -delete -o -type d -name __pycache__ -delete
}
Ensuite, cd
dans le répertoire que vous souhaitez nettoyer de manière récursive et tapez pyclean
.
Recherche GNU uniquement
Ceci est une solution GNU find, uniquement (c'est-à-dire Linux), mais je pense que c'est un peu plus agréable avec l'expression régulière:
pyclean () {
find . -regex '^.*\(__pycache__\|\.py[co]\)$' -delete
}
N'importe quelle plate-forme, utilisant Python 3
Sur Windows, vous n'avez probablement même pas find
. Cependant, vous avez probablement Python 3, qui à partir de 3.4 a le pathlib
module pratique :
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__')]"
Le -B
drapeau indique à Python de ne pas écrire de .pyc
fichiers. (Voir aussi la PYTHONDONTWRITEBYTECODE
variable d'environnement.)
Les abus ci-dessus répertorient les compréhensions pour la boucle, mais lors de l'utilisation python -c
, le style est plutôt une préoccupation secondaire. Alternativement, nous pourrions abuser (par exemple) __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()"
Critique d'une réponse
La première réponse disait:
find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf
Cela semble moins efficace car il utilise trois processus. find
prend une expression régulière, nous n'avons donc pas besoin d'un appel séparé de grep
. De même, il a -delete
, donc on n'a pas besoin d' un appel séparé rm
-et contrairement à un commentaire ici, il va supprimer des répertoires non vides tant qu'ils se vident en raison du match d'expression régulière.
Depuis la xargs
page de manuel:
find /tmp -depth -name core -type f -delete
Trouvez les fichiers nommés core dans ou en dessous du répertoire / tmp et supprimez-les, mais plus efficacement que dans l'exemple précédent (car nous évitons d'utiliser fork (2) et exec (2) pour lancer rm et nous n'avons pas besoin du processus xargs supplémentaire).
*__pycache__
,*.pyc*
et il ne fait pas la distinction entre les fichiers et les répertoires. La plupart desrm
commandes générées seront également superflues.