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?
rm
serán llamados con argumentos [-r, a.pyc, b.pyc].**/*.pyc
entonces 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ó?-delete
no forma parte de la especificación POSIX y no se garantiza que exista en todas las implementaciones defind
.find . -name '*.pyc' -delete
Seguramente el más simple.
fuente
find
soportes-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
pyclean
script que está en elpython-minimal
paquete.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__" -delete
a 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/null
debería arreglar eso.Si está usando bash> = 4.0 (o zsh)
Tenga en cuenta que
*/*.pyc
selecciona todos los.pyc
archivos en los subdirectorios inmediatos de primer nivel mientras**/*.pyc
escanea recursivamente todo el árbol de directorios. Como ejemplo,foo/bar/qux.pyc
será eliminado porrm **/*.pyc
pero no por*/*.pyc
.Las opciones de shell globstar deben estar habilitadas. Para habilitar
globstar
:y para verificar su estado:
fuente
rm **/*.pyc
vsrm */*.pyc
? (Esto último parecía funcionar para mí localmente.)rm */*.pyc
eliminará todos los.pyc
archivos en todos los subdirectorios de profundidad 1.rm **/*.pyc
eliminará todos los.pyc
archivos en todos los subdirectorios de profundidad 0+**
actúa como*
cuando se ejecuta y ejecutashopt globstar
arroja un error).Solía usar un alias para eso:
fuente
find -print0
y en suxargs -0
lugar.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
,*.pyo
archivos y__pycache__
directorios de forma recursiva en el directorio actual.Mando:
fuente
find
,grep
y 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 end0k
la respuesta, debe tener globstar habilitado en bash 4+ para que esto funcione según lo previsto. es decir, hacershopt -s globstar
o tener eso en uno de sus bash de origen. archivos.ll
suele 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.pyc
archivos.
, en su lugar, debe hacer algo comoecho **/*.pyc
con 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 -r
vuelve a aparecer en directorios, pero solo en los directorios que le dasrm
. También eliminará esos directorios. Una solución es:find
encontrará todos los archivos * .pyc de forma recursiva en el directorio actual, y elfor
ciclo iterará a través de la lista de archivos encontrados, eliminando cada uno.fuente
find
su-exec
predicado: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 f
para 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