Cambié el nombre de algunos archivos en un proyecto bastante grande y quiero eliminar los archivos .pyc que han dejado atrás. Probé el script bash:
rm -r *.pyc
Pero eso no se repite a través de las carpetas como pensé que lo haría. ¿Qué estoy haciendo mal?

rmserán llamados con argumentos [-r, a.pyc, b.pyc].**/*.pycentonces usted no tendrá que preocuparse de nuevoRespuestas:
fuente
find . -name \*.pyc -delete{}. ¿Qué sucedería si accidentalmente dividiera palabras y eliminara una ruta intermedia que se llama como un fragmento de la ruta que encontró?-deleteno forma parte de la especificación POSIX y no se garantiza que exista en todas las implementaciones defind.find . -name '*.pyc' -deleteSeguramente el más simple.
fuente
findsoportes-delete; No es parte del estándar POSIX.__pycache__directorios .pyo . Mira mi respuesta.-name '*.py?'para incluir.pyo, .pyc,...En la versión actual de Debian tiene un
pycleanscript que está en elpython-minimalpaquete.El uso es simple:
fuente
pyclean(y ahorapy3clean) se originan en un paquete Debian, y por lo tanto no están en RHEL.Añadir a su
~/.bashrc:Esto elimina todos los archivos y directorios .pyc y .pyo
__pycache__. También es muy rápido.El uso es simplemente:
fuente
find . -type d -name "__pycache__" -deletea menudo dará una advertencia sobre una ruta faltante porque aparentemente el contenido se agregará a la cola antes de que se elimine la carpeta.2>/dev/nulldebería arreglar eso.Si está usando bash> = 4.0 (o zsh)
Tenga en cuenta que
*/*.pycselecciona todos los.pycarchivos en los subdirectorios inmediatos de primer nivel mientras**/*.pycescanea recursivamente todo el árbol de directorios. Como ejemplo,foo/bar/qux.pycserá eliminado porrm **/*.pycpero no por*/*.pyc.Las opciones de shell globstar deben estar habilitadas. Para habilitar
globstar:y para verificar su estado:
fuente
rm **/*.pycvsrm */*.pyc? (Esto último parecía funcionar para mí localmente.)rm */*.pyceliminará todos los.pycarchivos en todos los subdirectorios de profundidad 1.rm **/*.pyceliminará todos los.pycarchivos en todos los subdirectorios de profundidad 0+**actúa como*cuando se ejecuta y ejecutashopt globstararroja un error).Solía usar un alias para eso:
fuente
find -print0y en suxargs -0lugar.Para usuarios de Windows:
fuente
La búsqueda busca de forma recursiva archivos * .pyc. El xargs toma esa lista de nombres y la envía a rm. El -print0 y el -0 le dicen a los dos comandos que separen los nombres de los archivos con caracteres nulos. Esto le permite funcionar correctamente en 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 una gran cantidad de archivos, eso llevará demasiado tiempo.
También podría agregar un par más de argumentos:
iname agrega insensibilidad a mayúsculas y minúsculas, como * .PYC. El no-run-if-empty le impide obtener un error de rm si no tiene dichos archivos.
fuente
Esto es más rápido que
fuente
Además, la gente por lo general quieren eliminar todos
*.pyc,*.pyoarchivos y__pycache__directorios de forma recursiva en el directorio actual.Mando:
fuente
find,grepy amigos no trabajo allí.Solo para agregar otra variante a la mezcla, también puede usar comillas inversas como esta:
fuente
rm.Extensión Django
La implementación se puede ver en su código fuente .
fuente
recursivo completo
fuente
**es redundante, y como end0kla respuesta, debe tener globstar habilitado en bash 4+ para que esto funcione según lo previsto. es decir, hacershopt -s globstaro tener eso en uno de sus bash de origen. archivos.llsuele tener un alias para algo asíls -l, pero no es realmente un comando o portátil. Por lo tanto, para enumerar recursivamente todos los.pycarchivos., en su lugar, debe hacer algo comoecho **/*.pyccon globstar habilitadoPrimer intento:
Luego añade:
A ~ / .profile
fuente
si ya no quieres .pyc puedes usar esta única línea en una terminal:
si cambias tu mente:
fuente
rm -rvuelve a aparecer en directorios, pero solo en los directorios que le dasrm. También eliminará esos directorios. Una solución es:findencontrará todos los archivos * .pyc de forma recursiva en el directorio actual, y elforciclo iterará a través de la lista de archivos encontrados, eliminando cada uno.fuente
findsu-execpredicado:find . -name '*.pyc' -exec rm {} +(más agradable, más corto, más seguro, robusto, más eficiente).fuente
Tu puedes correr
find . -name "*.pyc" -type f -delete.Pero úsalo con precaución. Corre primero
find . -name "*.pyc" -type fpara ver exactamente qué archivos eliminará.Además, asegúrese de que -delete sea el último argumento en su comando. Si lo coloca antes del argumento -name * .pyc, eliminará todo.
fuente
Si desea eliminar todos los archivos .pyc de la carpeta del proyecto.
Primero tienes
luego encuentre todo el archivo .pyc y elimínelo.
fuente