Exclui vários padrões de arquivos usando um comando (find)

0

Estou tentando find e excluo arquivos no diretório atual e nos subdiretórios (recursivamente) que correspondem a padrões diferentes e imprimo os arquivos correspondentes em stdout para saber quais são excluídos.

Por exemplo, quero corresponder todos os arquivos que começam com '&' e todos os arquivos começando e terminando com '$'.
Eu tentei usar:

find . -type f -name '&*' -or -type f -name '$*$' -exec rm -v {} \;

mas rm aplica-se apenas à última correspondência ('$ * $').
Então eu tentei:

find . -type f -name '&*' -or -type f -name '$*$' -delete

Mas isso não corresponde apenas ao último padrão, mas não produz os arquivos excluídos.
Eu sei que posso fazer isso:

rm -v ''find -type f -name '&*' -or -type f -name '$*$'''

mas eu realmente gostaria de evitar esse tipo de abordagem e fazê-lo com o comando find .

Alguma dica?
Agradecemos antecipadamente.

    
por LotoLo 29.10.2016 / 20:24

2 respostas

1

O problema é que exec só se aplica ao segundo padrão, tente colocar parênteses em torno de suas condições de pesquisa, para corrigir isso:

find . \( -type f -name '&*' -or -type f -name '$*$' \) -exec rm -v {} \;

O importante é que isso não é um bug, mas um recurso, para que você possa fazer algo assim:

find -type f -name '&*' -exec mv '{}' ./backup ';' -or -type f -name '$*$' -exec rm -v '{}' ';'

se precisar

    
por 29.10.2016 / 20:34
0

Embora a resposta do zeppelin esteja correta, também encontrei esta solução:

encontre. -type f \ (-name '& *' -ou -name '$ * $' \) -print -delete

    
por 29.10.2016 / 20:55