Ось безпечний спосіб:
grep -lrIZ foo . | xargs -0 rm -f --
-l друкує назви файлів, що відповідають шаблону пошуку.
-rздійснює рекурсивний пошук шаблону fooв заданому каталозі .. Якщо це не працює, спробуйте -R.
-I(велика літера i) призводить до пропускання двійкових файлів, таких як PDF.
-Z гарантує, що імена файлів закінчуються нулем (тобто нульовим), так що ім'я, що містить пробіл, не трактується неправильно (тобто, як кілька імен замість одного).
xargs -0подає імена файлів від grepдо rm -f, розділяючи слова на нуль (нуль) байтів (запам'ятайте -Zваріант від grep).
--часто забувається, але дуже важливо позначити кінець параметрів і дозволити видалення файлів, імена яких починаються з -.
Якщо ви хочете побачити, які файли збираються видалити, просто видаліть | xargs -0 rm -f --частину і залиште Zопцію " grep.
Інший користувач запропонував щось подібне до цього, чого не слід запускати, оскільки це небезпечно:
files=`grep foo * | cut -d: -f1`
rm -f $files # unsafe, do not run it!
Якщо у мене є файли, ImportantStuffякі я не хочу видаляти і obsolete ImportantStuffмістять foo, то я втрачаю ImportantStuff(і ні obsolete ImportantStuff !), Коли виконую цю команду, тому що вона $filesрозбивається на пробіли, коли вона інтерпретується. Небезпечно таким чином ставити список імен файлів у скалярну змінну оболонки.