Estou tentando find
excluir arquivos no diretório e subdiretórios atuais (recursivamente) que correspondem a padrões diferentes e imprimir os arquivos correspondentes para stdout
saber 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 rm
aplica-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 find
comando.
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