Eu tenho uma grande quantidade de pastas e arquivos. Preciso analisá-lo e encontrar apenas aqueles com a extensão xmp
para finalmente removê-los.
Como posso conseguir isso e acompanhar o nome dos arquivos removidos?
Para encontrar: Eu sei que posso usar find /path -name "*.xmp"
Mas como posso executar dois comandos na saída? mantenha o caminho e o nome do arquivo removelist.txt
e remova-o.
Com GNU find's
-fprint
e-delete
ações:-fprint file
- imprima o nome completo do arquivo no arquivofile
. Sefile
não existir quandofind
for executado, ele será criado; se existir, será truncado.-delete
- deletar arquivosUma maneira é executar um comando shell composto com
-exec
:Dentro de um sub-shell, ambos
echo
(anexados aremovelist.txt
) erm
serão executados em cada arquivo encontrado.Nota: A última
sh
é porque estamos usando-c
. Com esse sinalizador, o primeiro argumento a seguir é param 0 ou$0
que deveria ser o nome do shell.Tenho que admitir, @RomanPerekhrest tem uma resposta melhor para este caso particular, mas com a técnica aqui você pode fazer todo tipo de coisa para a qual pode não haver um
find
sinalizador dedicado. :)Para registrar os arquivos que foram removidos com sucesso, você pode fazer:
A
-print
ação só será executada se a-exec
ação for bem-sucedida, ou seja, se for bem-rm
sucedida.Com algumas
find
implementações, você pode substituir o-exec rm -f {} \;
por-delete
para evitar a execução de um comando para cada arquivo e evitar algumas condições de corrida (inicialmente uma extensão do FreeBSD, mas agora suportada pelo GNUfind
e alguns outros).