grep -n magenta *| rm *
grep: a.txt
:没有这样的文件或目录
grep: b
:没有这样的文件或目录
上面的命令删除除。,..之外的目录中的所有文件。 它应该只删除那些包含单词" magenta"
的文件此外,尝试grep magenta * -exec rm '{}' \;
但没有运气。
任何的想法?
答案 0 :(得分:17)
使用xargs
:
grep -l --null magenta ./* | xargs -0 rm
xargs的目的是在stdin上获取输入并将其放在其参数的命令行上。
选项的作用:
-l
选项告诉grep不要打印匹配的文本,而只打印包含匹配文本的文件的名称。
--null
选项告诉grep将文件名与NUL字符分开。这样可以安全地处理文件名的所有庄园。
xargs的-0
选项将其输入视为NUL分隔。
答案 1 :(得分:3)
grep -lr magenta . | xargs -0 rm -f --
-l
打印与搜索模式匹配的文件的文件名。-r
对给定目录magenta
中的模式.
执行递归搜索。
如果这不起作用,请尝试-R
。
(即,多个名称而不是一个名称)。xargs -0
将文件名从grep
提供给rm -f
--
经常被遗忘,但标记选项的结尾并允许删除名称以-
开头的文件非常重要。如果您想查看哪些文件即将被删除,只需删除| xargs -0 rm -f --
部分即可。