Как удалить файлы с помощью grep и rm?
grep -n magenta *| rm *
grep: a.txt: нет такого файла или каталога
grep: b: нет такого файла или каталога
выше команда удаляет все файлы в каталоге, за исключением ., .. . Он должен удалить только те файлы, которые содержат слово "magenta"
кроме того, попробовал grep magenta * -exec rm '{}' ; но не повезло.
Есть идеи?
2 ответов
использовать xargs:
grep -l --null magenta ./* | xargs -0 rm
цель xargs состоит в том, чтобы взять ввод на stdin и поместить его в командную строку своего аргумента.
Что делать:
на
-lопция говорит grep не печатать соответствующий текст и вместо этого просто печатать имена файлов, содержащих соответствующий текст.на
--nullопция сообщает grep, чтобы разделить имена файлов с символами NUL. Это позволяет всем усадьбе filename для безопасной обработки.на
-0опция для xargs для обработки его ввода как разделенных нулем.
grep -lr magenta . | xargs -0 rm -f --
-
-lпечатает имена файлов, соответствующие шаблону поиска. -
-rвыполняет рекурсивный поиск шаблонаmagentaв данном каталоге.. Если это не работает, попробуйте-R. (т. е. как несколько имен вместо одного). -
xargs -0подает имена файлов изgreptorm -f -
--часто забывают, но это очень важно чтобы отметить конец опций и разрешить удаление файлов, имена которых начинаются с-.
если вы хотите, чтобы увидеть, какие файлы будут удалены, просто удалите | xargs -0 rm -f -- часть.