Maneira otimizada de listar e excluir arquivos

2

Eu preciso listar e excluir arquivos .php, .xml. Para isso, estou usando o comando find .

Para listar: find . -type f -name \*.php -print0

Para excluir: find . -type f -name \*.php -print0 | xargs -0 rm -r

Como eu corro find duas vezes. É possível armazenar o resultado do primeiro comando e depois reutilizá-lo em segundo lugar?

Obrigado.

    
por Novice User 03.10.2013 / 13:03

2 respostas

7
find . -type f -name '*.php' -print0 | tee list | tr \0 \n
xargs -r0 rm -f < list

Supondo que você queira ver a lista antes de decidir excluí-los. Se não, você pode simplesmente fazer:

find . -name '*.php' -type f -print -delete

(observe que -print0 , -delete , -r , -0 não são padrão, mas suportados pela implementação da GNU)

Tenha também em atenção que, embora find -delete seja relativamente seguro, na primeira solução, alguém pode renomear diretórios para links simbólicos para algumas áreas sensíveis entre a execução do comando find e xargs e excluir arquivos que você não pretendia. Executar find duas vezes, a segunda vez com -delete evitaria isso.

    
por 03.10.2013 / 13:08
1

Como você precisa dos arquivos .php e .xml , o comando find deve se parecer com:

find . \( -name '*.php' -o -name '*.xml' \) -type f -print -exec rm {} +

O + instrucs find usa rm apenas uma vez por trecho de arquivos. Se tivéssemos usado \; , teríamos executado um comando rm para cada arquivo.

    
por 03.10.2013 / 13:33