Como posso excluir um arquivo específico de um conjunto de resultados usando o comando find no Linux?

0

Eu tenho o seguinte comando que lista todos os arquivos com a 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

  1. Exemplo.docx
  2. Dummydata.doc
  3. Exemplo.doc

Eu gostaria de excluir Sample.doc e Dummydata.docx. Como excluo os arquivos usando a opção -exec . Posso passar os nomes dos arquivos? rm Dummydata.docx Sample.doc , portanto, o comando ficaria da seguinte forma

find . -maxdepth 1 -iname \*.doc\* -exec rm Dummydata.docx Sample.doc

Posso passar os nomes dos arquivos para {} after rm '? por exemplo.

find . -maxdepth 1 -iname \*.doc\* -exec rm {Dummydata.docx} Sample.doc

Existe uma maneira melhor de fazer isso?

    
por PeanutsMonkey 22.09.2012 / 10:11

1 resposta

1

Se você souber os nomes dos arquivos antecipadamente, será mais fácil apenas removê-los imediatamente:

find . -iname "Dummydata.doc" -delete

Ou com várias condições:

find . \( -iname "Dummydata.doc" -o -iname "Sample.doc" \)

Os parênteses forçam a preferência, mas você precisa escapar ou citá-los, já que geralmente os parênteses têm um significado especial para o seu shell.

Caso contrário, para examinar primeiro a lista de resultados, você pode passar o caminho dos arquivos encontrados - aqui, coloque em {} - to sh . Para o comando sh , o caminho se tornará $0 e você poderá 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 receio que seja mais fácil apenas remover manualmente os arquivos.

    
por 22.09.2012 / 10:35

Tags