我用
find -type f -print0 | xargs -0 -n 10 grep -i searchstring
...递归搜索字符串。但它也给了我诸如“权限被拒绝”之类的错误消息。如何避免此类错误消息并只看到结果?
答案1
将标准错误重定向到 /dev/null。 IE
find -type f -print0 2>/dev/null | xargs -0 -n 10 grep -i searchstring 2>/dev/null
答案2
如果错误消息来自 find (例如,因为有一个您无法遍历的目录,请将其错误重定向到/dev/null
.
find -type f -print0 2>/dev/null | …
如果错误消息来自 grep (例如,因为某些文件不可读),请将其错误重定向到/dev/null
,或传递-s
选项以告诉它忽略不可读的文件。
xargs -0 grep -s -i searchstring /dev/null
限制一起传递到grep
.但是您应该添加/dev/null
以便grep
始终看到至少两个文件,否则grep
如果只有一个文件参数,则在其输出中省略文件名。对于 GNU grep 或 Busybox(即 Linux 或 Cygwin),您可以使用该-H
选项。
答案3
要仅搜索您有权访问的目录并仅检查您能够读取的文件,使用 GNU find
(这是问题中使用的),您可以使用-executable
and进行测试-readable
,如果您对每个目录具有访问和读取权限你遇到的。如果您对某个目录没有这些权限,您可以-prune
从搜索树中搜索该路径。将测试任何剩余的文件-readable
以确保您可以读取它。
这可以避免导致“权限被拒绝”错误,但也不会隐藏您可能遇到的任何其他错误想查看:
find . \
-type d ! \( -readable -executable \) -prune -o \
-type f -readable -exec grep -F -i searchstring {} +
我grep
批量提供常规文件的路径名,以避免为每个遇到的文件调用该实用程序。我还使用-F
withgrep
暗示searchstring
查询是使用不被解释为正则表达式的内容进行的。