Você pode usar find
:
find -name '*.foo' -delete
Como faço para remover todos * .foo em uma árvore de diretórios?
rm -r *.foo
não funciona.
Eu poderia tentar um loop, mas isso precisa de expansão recursiva:
for x in */*/.../*.foo
do rm $x
done
O que também não é possível.
Supondo que você tenha uma versão bastante recente do bash:
shopt -s globstar
rm -- **/*.foo
Você pode tentar usar o find:
find /dir/path -name *.foo -exec rm -f {} \;
Uma das soluções mais fáceis seria usar o comando find com o parâmetro exec
:
find /path/where/to/start/search -type f -name "*.foo" -exec rm {} \;
Isso irá procurar por todos os arquivos chamados * .foo e executar rm {filename} para cada um.
Se você tiver muitos arquivos, o uso do comando xargs
poderá ser mais rápido:
find /path/where/to/start/search -type f -name "*.foo" | xargs rm
Isto irá encontrar todos os arquivos, e colocará os nomes dos arquivos por trás do comando rm até o comprimento máximo de um comando que o seu distro / shell suportará, então quando executar, ele irá:
rm dir1/file1.foo dir1/file2.foo dir1/file3.foo
Como você pode imaginar agora, o binário rm
precisa ser iniciado muito menos, tornando esta opção mais rápida.