Eliminar los archivos coincidentes en todos los subdirectorios
¿Cómo puedo eliminar todos los archivos .swp de todos mis subdirectorios en Linux?
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.
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.
Si desea eliminar todos los archivos de todas las subcarpetas, puede utilizar el comando proporcionado,
$ find . -name \* -type f -delete