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.