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