Preciso listar e excluir arquivos .php, .xml. Para isso estou usando find
o comando.
Listar :
find . -type f -name \*.php -print0
Deletar :
find . -type f -name \*.php -print0 | xargs -0 rm -r
Enquanto corro find
duas vezes. É possível armazenar o resultado do primeiro comando e depois reutilizá-lo no segundo?
Obrigado.
Responder1
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. Caso contrário, você pode simplesmente fazer:
find . -name '*.php' -type f -print -delete
(observe que -print0
, -delete
, -r
, -0
não são padrão, mas são suportados pela implementação GNU)
Lembre-se também de 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 o momento em que você executa o comando find
e xargs
e fazer com que você exclua arquivos que não pretendia. Correr find
duas vezes, a segunda vez -delete
evitaria isso.
Responder2
Como você precisa .php
de .xml
arquivos, o find
comando deve ser semelhante a:
find . \( -name '*.php' -o -name '*.xml' \) -type f -print -exec rm {} +
As +
instruções find
para usar rm
apenas uma vez por bloco de arquivos. Se tivéssemos usado, \;
teríamos executado um rm
comando para cada arquivo.