Unix magic, ¿eliminar todos los archivos .pyc de un árbol de directorios?

11

¿Hay alguna forma rápida de eliminar todos los archivos .pyc de un árbol de directorios?

interestar
fuente

Respuestas:

28

Si tienes GNU find, entonces probablemente quieras

find <directory name> -name '*.pyc' -delete

Si necesitas algo portátil, entonces estás mejor con

find <directory name> -name '*.pyc' -exec rm {} \;

Si la velocidad es un gran problema y tienes GNU find y GNU xargs entonces

find <directory name> -name '*.pyc' -print0|xargs -0 -p <some number greater than 1> rm

Sin embargo, es poco probable que esto te acelere mucho, debido al hecho de que en su mayoría estarás esperando E / S.

Cian
fuente
perfecto gracias. Son los xargs que siempre olvido
interstar
2
En caso de que tenga archivos con espacios en los nombres, me he acostumbrado a usar siempre -print0 y "xargs -0".
Paul Tomblin, el
Tiene toda la razón, debería haber pensado en eso originalmente, editado para reflejar eso.
Cian el
44
También puede usar directamente '-delete' en lugar de '-print0 | xargs -0 rm '. Pero eso es cierto que esta opción no está presente en todas las versiones de 'find'.
rolaf
6

usando el comando find:

find /path/to/start -name '*.pyc' -exec rm -f {} \;
slubman
fuente
Eso es muy lento Usar xargs es más rápido, o si su versión de find lo admite, cambie " \;" al final a " +".
Pausado hasta nuevo aviso.
1
Puede ser un poco más lento: ejecuta "rm" una vez para cada archivo en lugar de agruparlos, pero es la forma más portátil de hacerlo. El OP no dijo qué tipo de Unix estaba usando, y Solaris find todavía no tiene la función -print0.
Kenster
1
+1, OP dijo que Unix no Linux, esta es la mejor solución portátil.
theotherrecibir
Creo que esta solución es la única que permite eliminar toneladas de archivos, si no me equivoco, usar xargs puede dejar en una línea de comando un error demasiado largo. +1, es mi elección desde hace años también.
drAlberT
Si está utilizando un archivo MAKE para construir su proyecto, es posible que desee agregarlo al destino "limpio".
Tom Newton el
1

cd al inicio del árbol de directorios y luego:

encontrar . -name '* .pyc' | xargs rm -f

Garry Harthill
fuente
No es necesario cd, simplemente coloque el directorio superior en el findcomando (en lugar de "punto").
Pausado hasta nuevo aviso.
Esto no maneja espacios en absoluto.
Cian