Ось безпечний спосіб:
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
розбивається на пробіли, коли вона інтерпретується. Небезпечно таким чином ставити список імен файлів у скалярну змінну оболонки.