Como acompanhamento da resposta do mouviciel, você também pode fazer isso como um loop for, em vez de usar xargs. Costumo achar xargs pesados, especialmente se precisar fazer algo mais complicado em cada iteração.
for f in $(find /tmp -name '*.pdf' -or -name '*.doc'); do rm $f; done
Como várias pessoas comentaram, isso falhará se houver espaços nos nomes de arquivos. Você pode contornar isso definindo temporariamente o IFS (separador de campo interno) para o caractere de nova linha. Isso também falha se houver caracteres curinga \[?*
nos nomes dos arquivos. Você pode contornar isso desativando temporariamente a expansão de curinga (globbing).
IFS=$'\n'; set -f
for f in $(find /tmp -name '*.pdf' -or -name '*.doc'); do rm "$f"; done
unset IFS; set +f
Se você tiver novas linhas em seus nomes de arquivos, isso também não funcionará. Você está melhor com uma solução baseada em xargs:
find /tmp \( -name '*.pdf' -or -name '*.doc' \) -print0 | xargs -0 rm
(Os colchetes de escape são necessários aqui para que as -print0
duas or
cláusulas sejam aplicáveis ).
O GNU e o * BSD find também têm uma -delete
ação, que seria assim:
find /tmp \( -name '*.pdf' -or -name '*.doc' \) -delete
rm
faz parte do código do OP, mas na verdade não é relevante para a pergunta. Eu acho que seria mais seguro se as respostas fossem formuladas usando um comando inofensivo comoecho
.