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.