![FreeBSD 标志用于在文件中搜索字符串时忽略权限错误](https://linux22.com/image/1216153/FreeBSD%20%E6%A0%87%E5%BF%97%E7%94%A8%E4%BA%8E%E5%9C%A8%E6%96%87%E4%BB%B6%E4%B8%AD%E6%90%9C%E7%B4%A2%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%97%B6%E5%BF%BD%E7%95%A5%E6%9D%83%E9%99%90%E9%94%99%E8%AF%AF.png)
我使用以下内容在目录中的所有文件中搜索字符串。
grep -Flr --include "*" 'mystring' /modules/
运行起来非常顺畅,并返回包含字符串的文件。但是,我还得到了一个带有权限被拒绝的文件列表,这意味着查找结果会更困难一些。
是否有一个标志可以传递给命令以忽略输出权限被拒绝的错误。
谢谢
答案1
我通常只使用:
grep -Flr --include "*" 'mystring' /modules/ 2>/dev/null
这将丢弃所有输出到标准错误,前提是你的 shell 允许2>
标准错误重定向。如果没有,请参阅这里。
如果(正如您在评论中指出的那样),您的 grep 版本将其错误输出到标准输出而不是标准错误,则可以使用以下命令过滤该输出:
grep -Flr --include "*" 'mystring' /modules/ | egrep -v 'Permission denied|ERROR'
这将根据您认为必要的模式丢弃线条。
答案2
如果您使用 BSD grep,请使用标志-s
;
grep -Flrs --include "*" 'mystring' /modules/
此外,我认为您可以删除,因为如果您使用或--include "*"
,BSD grep 默认会读取目录并对其进行递归。-r
-R