Как удалить файлы с помощью 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
подает имена файлов изgrep
torm -f
-
--
часто забывают, но это очень важно чтобы отметить конец опций и разрешить удаление файлов, имена которых начинаются с-
.
если вы хотите, чтобы увидеть, какие файлы будут удалены, просто удалите | xargs -0 rm -f --
часть.