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

Bash 如何使用grep和rm删除文件?,bash,unix,grep,Bash,Unix,Grep,grep:a.txt:没有这样的文件或目录 grep:b:没有这样的文件或目录 上述命令将删除目录中除。 它应该只删除那些包含“洋红”一词的文件 另外,尝试了grep洋红*-exec rm'{}'\但是没有运气。 有什么想法吗 使用xargs: grep -n magenta *| rm * xargs的目的是获取stdin上的输入,并将其放在参数的命令行上 选项的作用: -l选项告诉grep不要打印匹配的文本,而只打印包含匹配文本的文件名 --null选项告诉grep用NUL字符分隔文件

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

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

上述命令将删除目录中除。 它应该只删除那些包含“洋红”一词的文件

另外,尝试了
grep洋红*-exec rm'{}'\但是没有运气。

有什么想法吗

使用
xargs

grep -n magenta *| rm *
xargs的目的是获取stdin上的输入,并将其放在参数的命令行上

选项的作用:

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

  • --null
    选项告诉grep用NUL字符分隔文件名。这允许安全地处理所有形式的文件名

  • -0
    选项添加到xargs以将其输入视为NUL分隔

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

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

许多其他问题的副本。答案的关键部分通常是
xargs
。钟声和口哨声各不相同。
-n
选项适得其反;实际上,您可能希望使用
-l
来代替。应该注意,
-exec
只是
find
的奇怪参数<代码>grep
没有那个狗屎:DNo;这是查看文件名;问题是查看文件内容。请参阅我的关于
-Z
和可移植性(或缺乏可移植性)的文章。
-I
选项也因不可移植而受损。感谢@JonathanLeffler。将编辑回答请注意,
-Z
选项是非标准的-它受GNU
grep
支持;例如,Mac OS X上不支持它。或者更准确地说,在Mac OS X上,
-z
-z
选项表示“解压缩”,而
-null
在文件名后打印空值。但是答案已经更新为使用
--null
。这仍然不是“POSIX标准”,但有时,官方标准需要时间才能赶上现实世界。打字错误“l选项告诉grep只生成文件名而不生成匹配文本”对于大写字母“l'-l”是正确的,小写字母“l'-l”只输出文件名,不输出任何匹配信息。所以你的例子是好的,但对这个选项的描述是坏的。@rob我读了不同的句子,但我清楚地看到了你的观点:重新表述答案以消除歧义。非常感谢。
grep -l --null magenta ./* | xargs -0 rm