Exclua vários padrões de arquivos usando um comando (localizar)

Exclua vários padrões de arquivos usando um comando (localizar)

Estou tentando findexcluir arquivos no diretório e subdiretórios atuais (recursivamente) que correspondem a padrões diferentes e imprimir os arquivos correspondentes para stdoutsaber quais foram excluídos.

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

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

mas rmaplica-se apenas na última partida ('$*$').
Assim eu tentei:

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

Mas isso não apenas corresponde ao último padrão, mas também não gera 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 findcomando.

Alguma dica?
Desde já, obrigado.

Responder1

Seu problema é queexecutivose aplica apenas ao segundo padrão, tente colocar parênteses nas condições de pesquisa para corrigir isso:

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

O que deve ser observado é 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 você precisar

Responder2

No entantozepelima resposta está correta, encontrei também esta solução:

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

informação relacionada