2010-02-22 13:58:05 +0000 2010-02-22 13:58:05 +0000
84
84

Eliminar los archivos coincidentes en todos los subdirectorios

¿Cómo puedo eliminar todos los archivos .swp de todos mis subdirectorios en Linux?

Respuestas (5)

147
147
147
2010-02-22 13:59:15 +0000

Para eliminar todos los archivos *.swp bajo el directorio actual, utilice el comando find en una de las siguientes formas:

  • find . -name \*.swp -type f -delete

La opción -delete significa que find eliminará directamente los archivos que coincidan. Esta es la que mejor se ajusta a la pregunta real del OP.

Usar -type f significa que find sólo procesará los archivos.

  • find . -name \*.swp -type f -exec rm -f {} \; find . -name \*.swp -type f -exec rm -f {} +

La opción -exec permite a find ejecutar un comando arbitrario por archivo. La primera variante ejecutará el comando una vez por archivo, y la segunda ejecutará el menor número de comandos posible sustituyendo {} por el mayor número de parámetros posible.

  • find . -name \*.swp -type f -print0 | xargs -0 rm -f

La canalización de la salida a xargs se utiliza para ejecutar comandos por archivo más complejos que los posibles con -exec. La opción -print0 le dice a find que separe las coincidencias con ASCII NULL en lugar de una nueva línea, y -0 le dice a xargs que espere una entrada separada por NULL. Esto hace que la construcción de la tubería sea segura para los nombres de archivo que contienen espacios en blanco.

Vea man find para más detalles y ejemplos.

16
16
16
2010-02-22 14:07:23 +0000

find . -name '*.swp' -delete

El hecho de que encontrar haga el borrado por sí mismo elimina cualquier riesgo de espacio incrustado en el nombre del archivo, … Para mayor seguridad, considere añadir -type f sólo para los archivos.

4
4
4
2010-02-22 14:11:50 +0000
find /path -type f -name "*.swp" -delete
find /path -type f -name "*.swp" -exec rm -f "{}" +;

bash 4.0

shopt -s globstar
rm -f /path/**/*.swp
2
2
2
2010-02-22 14:04:52 +0000

Para buscar en mi directorio principal (y utilizando los programas GNU ‘find’ y ‘xargs’), utilizaría

find $HOME -name '*.swp' -print0 | xargs -0 rm -f

El uso de ‘-print0’ y ‘-0’ significa que los nombres estarán delimitados por caracteres ASCII NUL ‘\0’, y esto manejará las rutas de archivos con espacios en blanco, etc. en los nombres. Si cree que puede tener directorios (o archivos de dispositivo, o FIFOs, u otros no archivos) bajo su directorio que terminan con ‘.swp’, podría añadir la opción ‘-type f’ a ‘find’. Si sólo tiene directorios, el comando anterior no los eliminará de forma ruidosa.

0
0
0
2019-11-17 04:04:10 +0000

Si desea eliminar todos los archivos de todas las subcarpetas, puede utilizar el comando proporcionado,

$ find . -name \* -type f -delete