Comment puis-je supprimer tous.des fichiers pyc d'un projet?

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

 rm -r *.pyc

mais ça ne se répète pas dans les dossiers comme je le pensais. Ce que je fais mal?

584
demandé sur Lightness Races in Orbit 2009-04-24 15:51:39

18 réponses

find . -name "*.pyc" -exec rm -f {} \;
990
répondu Bill the Lizard 2018-07-17 09:27:03

find . -name '*.pyc' -delete

sûrement le plus simple.

909
répondu Andy Baker 2016-01-20 12:46:24

dans la version actuelle de debian, vous avez le script pyclean qui est dans le paquet python-minimal .

L'Usage est simple:

pyclean .
79
répondu jb. 2012-12-02 11:18:45

ajouter à votre ~/.bashrc :

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

cela supprime tout .pyc et .les fichiers pyo, et les répertoires __pycache__ . Il est également très rapide.

"151940920 d'Utilisation" est tout simplement:

$ cd /path/to/directory
$ pyclean
68
répondu Wilfred Hughes 2014-04-07 15:02:25

si vous utilisez bash > = 4,0 (ou zsh)

rm **/*.pyc

notez que */*.pyc sélectionne tous les fichiers .pyc dans les sous-répertoires immédiats de premier niveau tandis que **/*.pyc scanne récursivement l'arborescence complète du répertoire. Par exemple, foo/bar/qux.pyc sera supprimé par rm **/*.pyc mais pas par */*.pyc .

les options de l'interpréteur de commandes globstar doivent être activées. Pour activer globstar :

shopt -s globstar

et vérifier son statut:

shopt globstar
49
répondu d0k 2017-01-30 14:06:51

j'utilisais un alias pour ça:

$ which pycclean

pycclean is aliased to `find . -name "*.pyc" | xargs -I {} rm -v "{}"'
30
répondu miku 2013-08-16 11:44:28
find . -name '*.pyc' -print0 | xargs -0 rm

La rechercher de manière récursive recherche *.fichiers pyc. Les xargs prennent cette liste de noms et l'envoient à rm. Le-print0 et le -0 disent aux deux commandes de séparer les noms de fichiers avec des caractères nuls. Cela lui permet de travailler 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 il lance une nouvelle copie de rm pour chaque fichier. Sur un système lent ou avec un grand nombre de fichiers, prendre trop de temps.

vous pouvez aussi ajouter quelques args:

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

Iname ajoute l'insensibilité de cas, comme *.PYC . La non-exécution si vide, vous ne pouvez obtenir une erreur de rm si vous n'avez pas ces fichiers.

16
répondu Ron Romero 2014-01-31 15:32:37
$ find . -name '*.pyc' -delete

C'est plus rapide que

$ find . -name "*.pyc" -exec rm -rf {} \;
15
répondu Moxdata 2014-07-14 00:49:27

pour les utilisateurs de windows:

del /S *.pyc
12
répondu haki 2015-10-23 13:47:47

juste pour ajouter une autre variante au mélange, vous pouvez aussi utiliser des backquotes comme ceci:

rm `find . -name *.pyc`
8
répondu Clint Miller 2009-05-29 11:48:29

Django Extension

Note: Cette réponse est très spécifique à projet Django qui ont déjà utilisé extension Django .

python manage.py clean_pyc

la mise en œuvre peut être consultée dans son code source .

8
répondu Yeo 2015-12-13 17:46:16
"151910920 complet" récursive

ll **/**/*.pyc
rm **/**/*.pyc
7
répondu romuloigor 2012-09-03 19:42:03

en outre, les gens veulent généralement supprimer tous *.pyc , *.pyo fichiers et __pycache__ répertoires récursivement dans le répertoire courant.

commande:

find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf
6
répondu Mithril 2017-10-30 00:49:24

Première manche:

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

puis Ajouter:

export PYTHONDONTWRITEBYTECODE=1

à ~/.profil

3
répondu Michael Benin 2014-11-04 11:11:33

rm -r revient dans les répertoires, mais seulement les répertoires que vous donnez à rm . Il supprimera également ces répertoires. Une solution est:

for i in $( find . -name *.pyc )
do
  rm $i
done

find permet de trouver tous les *.les fichiers pyc se trouvent récursivement dans le répertoire courant, et la boucle for va itérer à travers la liste des fichiers trouvés, en supprimant chacun.

2
répondu Chris Lutz 2009-04-24 11:58:33
find . -name "*.pyc"|xargs rm -rf
2
répondu PiyusG 2014-11-20 12:11:55

si vous ne voulez pas .pyc plus, vous pouvez utiliser cette ligne dans un terminal:

export PYTHONDONTWRITEBYTECODE=1

si vous changez d'avis:

unset PYTHONDONTWRITEBYTECODE
1
répondu Kevin Sabbe 2018-05-12 08:27:36

vous pouvez lancer find . -name "*.pyc" -type f -delete .

mais utilisez-le avec précaution. Exécutez d'abord find . -name "*.pyc" -type f pour voir exactement quels fichiers vous allez supprimer.

de plus, assurez-vous que-delete est le dernier argument de votre commande. Si vous le mettez avant le nom *.argument pyc, il va tout supprimer.

0
répondu gpap 2018-10-11 15:19:03