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

问题描述 投票:10回答:2
grep -n magenta *| rm *

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

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

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

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

bash unix grep
2个回答
17
投票

使用xargs

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

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

选项的作用如下:

  • -l选项告诉grep不要打印匹配的文本,而只是打印包含匹配文本的文件的名称。
  • --null选项告诉grep将文件名与NUL字符分开。这样可以安全地处理文件名的所有庄园。
  • xazgs的-0选项将其输入视为NUL分隔。

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 --部分即可。

© www.soinside.com 2019 - 2024. All rights reserved.