¿es posible usar rm para eliminar archivos y directorios que coinciden con un patrón de forma recursiva sin usar otros comandos?
unix
maintenance
rm
usuario15586
fuente
fuente
find | grep | xargs rm
. Si hay archivos con espacios (o líneas nuevas), esto se romperá (y dependiendo de los nombres de los archivos y de dónde están los espacios) podría eliminar cosas que no tenía la intención de eliminar.find … -print0 | xargs -0 rm
Será mucho más robusto. Sin embargo, significará que no puede usargrep
y debe usarfind
los predicados para hacer coincidir e imprimir0 solo los archivos deseados. El segundo ejemplo de Warren será más robusto comofind -type f -name '*~' -print0 | xargs -0 rm
."sin usar otros comandos"
No.
fuente
Usando Bash, con
globstar
set, sí :Pruébelo, por ejemplo
ls -1
, primero, antesrm
de enumerar los archivos que coinciden.Establece opciones a través de, por ejemplo
shopt -s globstar
.Alternativamente, una
find
variante más corta :o para GNU
find
:u otra alternativa para no GNU
find
(un poco más lento):Para eliminar también los directorios, a medida que lo solicite: simplemente cambie
rm
arm -r
los comandos anteriores y omita la coincidencia solo-type f
en losfind
comandos.fuente
Hubiera supuesto "rm -rf", ¿dónde hay una combinación de nombres de archivo y patrones coincidentes como * y? etc (por ejemplo, hoy_log_2009 ????. log). Eso comenzará a partir del Dir actual y disminuirá de forma recursiva la eliminación de archivos que tengan ese patrón.
fuente
Si usa zsh (1) , active "globbing extendido" con
setopt extendedglob
.zshrc. Prefijar el patrón con '** /' luego eliminará recursivamente:% rm -rf ** / <patrón>
Sin embargo, si hay muchos archivos para eliminar, debe recurrir a find (1) con xargs (1) o -exec, y también recomiendo hacerlo en scripts de shell.
fuente