Como seguimiento a la respuesta de Mouviciel, también puede hacer esto como un bucle for, en lugar de usar xargs. A menudo encuentro engorrosos los xargs, especialmente si necesito hacer algo más complicado en cada iteración.
for f in $(find /tmp -name '*.pdf' -or -name '*.doc'); do rm $f; done
Como han comentado varias personas, esto fallará si hay espacios en los nombres de archivo. Puede solucionar este problema configurando temporalmente el IFS (separador de campo interno) en el carácter de nueva línea. Esto también falla si hay caracteres comodín \[?*en los nombres de archivo. Puede solucionarlo deshabilitando temporalmente la expansión de comodines (globbing).
IFS=$'\n'; set -f
for f in $(find /tmp -name '*.pdf' -or -name '*.doc'); do rm "$f"; done
unset IFS; set +f
Si tiene nuevas líneas en sus nombres de archivo, entonces tampoco funcionará. Estás mejor con una solución basada en xargs:
find /tmp \( -name '*.pdf' -or -name '*.doc' \) -print0 | xargs -0 rm
(Los corchetes escapados se requieren aquí para que se -print0apliquen a ambas orcláusulas).
GNU y * BSD find también tienen una -deleteacción, que se vería así:
find /tmp \( -name '*.pdf' -or -name '*.doc' \) -delete
rmes parte del código de OP, pero en realidad no es relevante para la pregunta formulada. Creo que sería más seguro si las respuestas se formularan usando un comando inofensivo comoecho.