我怎样才能让grep不打印“没有这样的文件或目录”的错误?

我通过gitpipe理大量代码,每当我做一个grep的时候,我都会看到一堆堆的forms的消息:

> grep pattern * -R -n whatever/.git/svn: No such file or directory 

有什么办法可以让这些线路消失吗?

您可以使用-s--no-messages标志来抑制错误。

-s,–no-messages压制错误信息

 grep pattern * -s -R -n 

如果你通过git存储库,我build议你使用git grep 。 您不需要通过-R或path。

 git grep pattern 

这将显示从当前目录下的所有匹配。

像这样的错误通常会发送到“标准错误”stream,您可以将它们传送到一个文件,或者只是在大多数命令中消失:

 grep pattern * -R -n 2>/dev/null 

我通常不会让grep做recursion本身。 通常有几个你想跳过的目录(.git,.svn …)

你可以用像那样的姿态来做聪明的别名:

 find . \( -name .svn -o -name .git \) -prune -o -type f -exec grep -Hn pattern {} \; 

乍一看似乎有点矫枉过正,但是当你需要过滤出一些图案时,这个方法非常方便。

我已经看到这种情况发生了好几次,断链(指向不存在的文件的符号链接),grep尝试search不存在的目标文件(因此是正确和准确的错误消息)。

我通常不会在控制台上执行系统pipe理员任务时感到麻烦,但是在脚本中,我使用“find”查找文本文件,然后grep每个文件:

 find /etc -type f -exec grep -nHi -e "widehat" {} \; 

代替:

 grep -nRHi -e "widehat" /etc 

你有没有尝试过xargs中-0选项? 像这样的东西:

 ls -r1 | xargs -0 grep 'some text' 

在grep中使用-I

例如: grep SEARCH_ME -Irs ~/logs