Pregunta ¿Cómo elimino todos los archivos .pyc de un proyecto?


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

 rm -r *.pyc

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


566
2018-04-24 11:51


origen


Respuestas:


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

964
2018-04-24 11:55



find . -name '*.pyc' -delete

Seguramente el más simple.


889
2018-05-29 11:37



En la versión actual de Debian tienes pyclean script que está en python-minimal paquete.

El uso es simple:

pyclean .

78
2017-12-02 11:18



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 __pycache__ directorios. También es muy rápido.

El uso es simple:

$ cd /path/to/directory
$ pyclean

66
2018-04-07 15:02



Si usa bash> = 4.0 (o zsh)

rm **/*.pyc

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

Las opciones del shell globstar deben estar habilitadas. Para permitir globstar:

shopt -s globstar

y para verificar su estado:

shopt globstar

47
2018-04-25 17:36



Solía ​​usar un alias para eso:

$ which pycclean

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

30
2018-04-25 17:19



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

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

La solución con -exec funciona, pero genera una nueva copia de rm para cada archivo. En un sistema lento o con muchos archivos, tomará 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 de mayúsculas y minúsculas, como * .PYC. El no-run-if-empty evita que obtenga un error de rm si no tiene dichos archivos.


16
2018-04-25 17:12



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

Esto es más rápido que

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

15
2017-07-14 00:49