Eu tenho o seguinte comando que lista todos os arquivos com extensão doc
,, docx
etc.
find . -maxdepth 1 -iname \*.doc\*
O comando retorna vários arquivos, alguns dos quais eu gostaria de excluir. Então, por exemplo, os resultados retornados são
- Exemplo.docx
- Dummydata.doc
- Exemplo.doc
Gostaria de excluir Sample.doc e Dummydata.docx. Como excluo os arquivos usando a -exec
opção. Consigo passar os nomes dos arquivos, por exemplo, rm Dummydata.docx Sample.doc
o comando ficaria assim
find . -maxdepth 1 -iname \*.doc\* -exec rm Dummydata.docx Sample.doc
Posso passar os nomes dos arquivos dentro {} after
do rm`? por exemplo
find . -maxdepth 1 -iname \*.doc\* -exec rm {Dummydata.docx} Sample.doc
Existe uma maneira melhor de fazer isso?
Responder1
Se você souber os nomes dos arquivos com antecedência, será mais fácil removê-los imediatamente:
find . -iname "Dummydata.doc" -delete
Ou, com múltiplas condições:
find . \( -iname "Dummydata.doc" -o -iname "Sample.doc" \)
Os parênteses forçam a preferência, mas você precisa escapá-los ou citá-los, pois normalmente os parênteses têm um significado especial para o seu shell.
Caso contrário, se quiser examinar primeiro a lista de resultados, você pode passar o caminho dos arquivos encontrados – aqui, colocados em {}
– para sh
. Para o sh
comando, o caminho se tornará $0
, e você pode compará-lo com o nome do arquivo que deseja remover:
find . -maxdepth 1 -iname "*.doc" \
-exec sh -c 'if [ "$0" == "Dummydata.doc" ] || [ "$0" == "Sample.doc" ]; then echo rm "$0"; fi' {} \;
Aqui, remova echo
quando tiver certeza de que o arquivo correto será removido. Mas temo que será mais fácil remover manualmente os arquivos.