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

3

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.

    
por user877329 23.12.2013 / 11:19

4 respostas

9

Você pode usar find :

find -name '*.foo' -delete
    
por 23.12.2013 / 11:21
4

Supondo que você tenha uma versão bastante recente do bash:

shopt -s globstar
rm -- **/*.foo
    
por 23.12.2013 / 12:12
1

Você pode tentar usar o find:

find /dir/path -name *.foo -exec rm -f {} \;
    
por 23.12.2013 / 11:21
0

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.

    
por 23.12.2013 / 11:25

Tags