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?
18 réponses
dans la version actuelle de debian, vous avez le script pyclean
qui est dans le paquet python-minimal
.
L'Usage est simple:
pyclean .
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.
$ cd /path/to/directory
$ pyclean
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
j'utilisais un alias pour ça:
$ which pycclean
pycclean is aliased to `find . -name "*.pyc" | xargs -I {} rm -v "{}"'
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.
$ find . -name '*.pyc' -delete
C'est plus rapide que
$ find . -name "*.pyc" -exec rm -rf {} \;
juste pour ajouter une autre variante au mélange, vous pouvez aussi utiliser des backquotes comme ceci:
rm `find . -name *.pyc`
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 .
ll **/**/*.pyc
rm **/**/*.pyc
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
Première manche:
find . -type f -name "*.py[c|o]" -exec rm -f {} +
puis Ajouter:
export PYTHONDONTWRITEBYTECODE=1
à ~/.profil
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.
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
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.