Как удалить файлы с помощью 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 -- часть.
