bash - sauf - supprimer tous les fichiers d'un dossier linux




Comment supprimer tous les fichiers.pyc d'un projet? (11)

J'ai renommé certains fichiers dans un projet assez volumineux et je souhaite supprimer les fichiers .pyc qu'ils ont laissés. J'ai essayé le script bash:

 rm -r *.pyc

Mais cela ne se répète pas dans les dossiers comme je le pensais. Qu'est-ce que je fais mal?



Ajoutez à votre ~/.bashrc :

pyclean () {
        find . -type f -name "*.py[co]" -delete
        find . -type d -name "__pycache__" -delete
}

Cela supprime tous les fichiers .pyc et .pyo et les répertoires __pycache__ . C'est aussi très rapide.

L'utilisation est simple:

$ cd /path/to/directory
$ pyclean

En outre, les utilisateurs souhaitent généralement supprimer tous les répertoires *.pyc , *.pyo et __pycache__ manière récursive dans le répertoire en cours.

Commander:

find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf

J'avais l'habitude d'utiliser un alias pour ça:

$ which pycclean

pycclean is aliased to `find . -name "*.pyc" | xargs -I {} rm -v "{}"'

Pour les utilisateurs de Windows:

del /S *.pyc

Première exécution:

find . -type f -name "*.py[c|o]" -exec rm -f {} +

Puis ajouter:

export PYTHONDONTWRITEBYTECODE=1

Pour ~ / .profile


récursif complet

ll **/**/*.pyc
rm **/**/*.pyc

find . -name '*.pyc' -delete

Sûrement le plus simple.


$ find . -name '*.pyc' -delete

C'est plus rapide que

$ find . -name "*.pyc" -exec rm -rf {} \;

find . -name "*.pyc" -exec rm -f {} \;

comme mentionné dans les commentaires, vous pouvez également utiliser l'action -delete

find . -name \*.pyc -delete

find . -name '*.pyc' -print0 | xargs -0 rm

La recherche recherche récursivement les fichiers * .pyc. Le xargs prend cette liste de noms et l'envoie à rm. Les options -print0 et -0 indiquent aux deux commandes de séparer les noms de fichiers par des caractères nuls. Cela lui permet de fonctionner correctement sur les noms de fichiers contenant des espaces, et même un nom de fichier contenant une nouvelle ligne.

La solution avec -exec fonctionne, mais elle crée une nouvelle copie de rm pour chaque fichier. Sur un système lent ou avec beaucoup de fichiers, cela prendra trop de temps.

Vous pouvez également ajouter quelques args supplémentaires:

find . -iname '*.pyc' -print0 | xargs -0 --no-run-if-empty  rm

L'iname ajoute une insensibilité à la casse, comme * .PYC. Le no-run-if-empty vous empêche d'obtenir une erreur de rm si vous n'avez pas de tels fichiers.





bash