Eliminar archivos coincidentes en todos los subdirectorios

77

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

Alex
fuente
3
No olvides mirar programas como trash-cli para que puedas recuperarlos, en lugar de usar rm. code.google.com/p/trash-cli (Simplemente reemplazaría 'rm' con 'basura' en todas las respuestas a continuación.)

Respuestas:

137

Elimine todos los archivos * .swp debajo del directorio actual, use el findcomando en una de las siguientes formas:

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

    La -deleteopción significa que find eliminará directamente los archivos coincidentes. Esta es la mejor coincidencia con la pregunta real de OP.

    Usar -type fsignifica find solo procesará archivos.

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

    La opción -execpermite encontrar para ejecutar un comando arbitrario por archivo. La primera variante ejecutará el comando una vez por archivo, y la segunda ejecutará la menor cantidad de comandos posible al reemplazar {}con tantos parámetros como sea posible.

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

    La canalización de la salida xargsse utiliza para formar comandos por archivo más complejos de lo que es posible con -exec. La opción -print0le dice findque separe las coincidencias con ASCII NULL en lugar de una nueva línea y -0le dice xargsque 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.

Ver man findpara más detalles y ejemplos.

Lachlan Roche
fuente
16

find . -name '*.swp' -delete

Una vez que encuentre la eliminación, elimine cualquier riesgo de espacio incrustado en el nombre de archivo, ... Para mayor seguridad, también considere agregar -type fsolo para archivos.

Zeograd
fuente
4
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
usuario31894
fuente
2

Para buscar en mi directorio de inicio (y usar GNU 'find' y 'xargs'), usaría:

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

El uso de ' -print0' y ' -0' significa que los nombres serán delimitados por caracteres ASCII NUL '\ 0', y esto manejará las rutas de archivo con espacios en blanco, etc. en los nombres. Si cree que puede tener directorios (o archivos de dispositivo, o FIFO, u otros que no sean archivos) en su directorio que terminan en '.swp', puede agregar la -type fopción ' ' para 'buscar'. Si solo tiene directorios, el comando anterior no podrá eliminarlos ruidosamente.

Jonathan Leffler
fuente