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