Вот безопасный способ:
grep -lrIZ foo . | xargs -0 rm -f --
-l печатает имена файлов, соответствующие шаблону поиска.
-rвыполняет рекурсивный поиск шаблона fooв заданном каталоге .. Если это не сработает, попробуйте -R.
-I(заглавная i) приводит к пропуску двоичных файлов, таких как PDF.
-Z гарантирует, что имена файлов заканчиваются на ноль (т. е. на ноль), чтобы имя, содержащее пробелы, не интерпретировалось неправильно (т. е. как несколько имен вместо одного).
xargs -0кормит имена файлов из grepto rm -f, разделяя слова на ноль (ноль) байтов (запомните -Zопцию from 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разбивается на пробелы, когда она интерпретируется. Таким образом, опасно помещать список имен файлов в скалярную переменную оболочки.