Remova todos os *.foo na árvore de diretórios

Remova todos os *.foo na árvore de diretórios

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 execparâ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 xargscomando 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 rmbinário precisa ser iniciado muito menos, tornando esta uma opção mais rápida.

informação relacionada