
¿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 exec
pará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 xargs
comando 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 rm
binario necesita iniciarse mucho menos, lo que hace que esta sea una opción más rápida.