Eliminar todos los *.foo en el árbol de directorios

Eliminar todos los *.foo en el árbol de directorios

¿Cómo elimino todos los *.foo en un árbol de directorios?

rm -r *.foo

No funciona.

Podría probar un bucle, pero necesita una expansión recursiva:

for x in */*/.../*.foo
    do rm $x
done

Lo cual tampoco es posible.

Respuesta1

Puedes usar find:

find -name '*.foo' -delete

Respuesta2

Suponiendo que tienes una versión bastante reciente de bash:

shopt -s globstar
rm -- **/*.foo

Respuesta3

Podrías intentar usar buscar:

find /dir/path -name *.foo -exec rm -f {} \;

Respuesta4

Una de las soluciones más sencillas sería utilizar el comando buscar con el execparámetro:

find /path/where/to/start/search -type f -name "*.foo" -exec rm {} \;

Esto buscará todos los archivos llamados *.foo y realizará rm {nombre de archivo} para cada uno.

Si tiene muchos archivos, el uso del xargscomando puede ser más rápido:

find /path/where/to/start/search -type f -name "*.foo" | xargs rm 

Esto encontrará todos los archivos y colocará los nombres de los archivos detrás del comando rm hasta la longitud máxima de un comando que su distribución/shell admitirá, por lo que cuando lo ejecute será esto:

rm dir1/file1.foo dir1/file2.foo dir1/file3.foo 

Como puede imaginar, ahora el rmbinario necesita iniciarse mucho menos, lo que hace que esta sea una opción más rápida.

información relacionada