Як подальший відповідь на mouviciel, ви можете також зробити це як цикл, замість того, щоб використовувати xargs. Я часто вважаю, що xargs громіздкий, особливо якщо мені потрібно зробити щось складніше у кожній ітерації.
for f in $(find /tmp -name '*.pdf' -or -name '*.doc'); do rm $f; done
Як прокоментувала низка людей, це не вдасться, якщо у файлах файлів є пробіли. Можна обійти це питання, тимчасово встановивши IFS (внутрішній сепаратор поля) на символ нового рядка. Це також не вдається, якщо \[?*в іменах файлів є символи підстановки . Ви можете подолати це, тимчасово відключивши розширення підстановки (глобальний).
IFS=$'\n'; set -f
for f in $(find /tmp -name '*.pdf' -or -name '*.doc'); do rm "$f"; done
unset IFS; set +f
Якщо у ваших іменах є нові рядки, вони також не будуть працювати. Вам краще за допомогою рішення на основі xargs:
find /tmp \( -name '*.pdf' -or -name '*.doc' \) -print0 | xargs -0 rm
(Тут виділені дужки повинні -print0застосовуватися до обох orстатей.)
GNU та * BSD також має -deleteдію, яка виглядатиме так:
find /tmp \( -name '*.pdf' -or -name '*.doc' \) -delete
rmє частиною коду ОП, але він насправді не має відношення до поставленого питання. Я думаю, було б безпечніше, якби відповіді були сформульовані за допомогою нешкідливої команди типуecho.