tutorial traduccion script comandos bash

bash - traduccion - ¿Cómo elimino todos los archivos.pyc de un proyecto?



bash ubuntu (18)

Extensión Django

Nota: esta respuesta es muy específica para el proyecto de Django que ya ha estado usando la extensión de Django .

python manage.py clean_pyc

La implementación se puede ver en su código fuente .

He cambiado el nombre de algunos archivos en un proyecto bastante grande y quiero eliminar los archivos .pyc que dejaron. Probé el guión de bash:

rm -r *.pyc

Pero eso no repite a través de las carpetas como pensé. ¿Qué estoy haciendo mal?


Además, la gente generalmente quiere eliminar todos los *.pyc *.pyo , *.pyo y __pycache__ recursiva en el directorio actual.

Mando:

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


Agrega a tu ~/.bashrc :

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

Esto elimina todos los archivos .pyc y .pyo, y los directorios __pycache__ . También es muy rápido.

El uso es simplemente:

$ cd /path/to/directory $ pyclean


En la versión actual de debian, tiene pyclean script pyclean que está en el paquete python-minimal .

El uso es simple:

pyclean .


Para usuarios de Windows:

del /S *.pyc


Primer intento:

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

Luego añade:

export PYTHONDONTWRITEBYTECODE=1

A ~ / .profile


Puedes correr find . -name "*.pyc" -type f -delete find . -name "*.pyc" -type f -delete .

Pero úsalo con precaución. Ejecutar primero find . -name "*.pyc" -type f find . -name "*.pyc" -type f para ver exactamente qué archivos eliminará.

Además, asegúrese de que -delete es el último argumento en su comando. Si lo coloca antes del argumento -name * .pyc, eliminará todo.


Si estás usando bash> = 4.0 (o zsh)

rm **/*.pyc

Tenga en cuenta que */*.pyc selecciona todos los .pyc */*.pyc en los subdirectorios inmediatos de primer nivel, mientras que **/*.pyc escanea recursivamente todo el árbol de directorios. Como ejemplo, foo/bar/qux.pyc será eliminado por rm **/*.pyc pero no por */*.pyc .

Las opciones de shell globstar deben estar habilitadas. Para habilitar globstar :

shopt -s globstar

y para comprobar su estado:

shopt globstar


Si ya no quieres .pyc, puedes usar esta línea en un terminal:

export PYTHONDONTWRITEBYTECODE=1

si cambias tu mente:

unset PYTHONDONTWRITEBYTECODE


Solía ​​usar un alias para eso:

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


Solo para agregar otra variante a la mezcla, también puedes usar citas de espalda como esta:

rm `find . -name *.pyc`


recursivo completo

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


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

Seguramente el más sencillo.


rm -r recurre en directorios, pero solo los directorios que le da a rm . También eliminará esos directorios. Una solución es:

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

find encontrará todos los archivos * .pyc de forma recursiva en el directorio actual, y el bucle for repetirá la lista de archivos encontrados, eliminando cada uno de ellos.


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

Esto es más rápido que

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


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


find . -name "*.pyc"|xargs rm -rf


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

El hallazgo busca recursivamente archivos * .pyc. El xargs toma esa lista de nombres y la envía a rm. La -print0 y la -0 indican a los dos comandos que separen los nombres de archivo con caracteres nulos. Esto le permite trabajar correctamente en nombres de archivos que contienen espacios, e incluso un nombre de archivo que contiene una nueva línea.

La solución con -exec funciona, pero hace girar una nueva copia de rm para cada archivo. En un sistema lento o con una gran cantidad de archivos, eso llevará demasiado tiempo.

También podría agregar un par de argumentos más:

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

iname agrega insensibilidad a los casos, como * .PYC. Si no tiene archivos de este tipo, no ejecute si está vacío evitará que reciba un error de rm.