如何使用grep和rm删除文件?

时间:2015-08-03 04:53:48

标签: bash unix grep

grep -n magenta *| rm *

grep: a.txt:没有这样的文件或目录

grep: b:没有这样的文件或目录

上面的命令删除除。,..之外的目录中的所有文件。 它应该只删除那些包含单词" magenta"

的文件

此外,尝试grep magenta * -exec rm '{}' \;但没有运气。 任何的想法?

2 个答案:

答案 0 :(得分:17)

使用xargs

grep -l --null magenta ./* | xargs -0 rm

xargs的目的是在stdin上获取输入并将其放在其参数的命令行上。

选项的作用:

  • -l选项告诉grep不要打印匹配的文本,而只打印包含匹配文本的文件的名称。

  • --null选项告诉grep将文件名与NUL字符分开。这样可以安全地处理文件名的所有庄园。

  • xargs的-0选项将其输入视为NUL分隔。

答案 1 :(得分:3)

Here is a safe way:

grep -lr magenta . | xargs -0 rm -f --
  • -l打印与搜索模式匹配的文件的文件名。
  • -r对给定目录magenta中的模式.执行递归搜索。 如果这不起作用,请尝试-R。 (即,多个名称而不是一个名称)。
  • xargs -0将文件名从grep提供给rm -f
  • --经常被遗忘,但标记选项的结尾并允许删除名称以-开头的文件非常重要。

如果您想查看哪些文件即将被删除,只需删除| xargs -0 rm -f --部分即可。