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
选项是非标准的-它受GNUgrep
支持;例如,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