我正在grepping一大堆由git管理的代码,每当我做grep时,我都会看到成堆的形式的消息:
> grep pattern * -R -n
whatever/.git/svn: No such file or directory
有什么办法能让这些皱纹消失吗?
我正在grepping一大堆由git管理的代码,每当我做grep时,我都会看到成堆的形式的消息:
> grep pattern * -R -n
whatever/.git/svn: No such file or directory
有什么办法能让这些皱纹消失吗?
当前回答
我通常不让grep自己做递归。通常有一些您想要跳过的目录(。git, . svn…)
你可以像这样巧妙地使用别名:
find . \( -name .svn -o -name .git \) -prune -o -type f -exec grep -Hn pattern {} \;
乍一看,这似乎有些过分,但当您需要过滤掉一些模式时,它是相当方便的。
其他回答
在grep中使用-I。
例如:grep SEARCH_ME -Irs ~/logs。
如果你正在使用git存储库,我建议你使用git grep。你不需要传入-R或者路径。
git grep pattern
这将显示当前目录下的所有匹配项。
像这样的错误通常会被发送到“标准错误”流,你可以将其管道到一个文件中,或者在大多数命令中使其消失:
grep pattern * -R -n 2>/dev/null
你试过xargs中的-0选项吗?就像这样:
ls -r1 | xargs -0 grep 'some text'
我已经看到这种情况发生过几次了,对于断开的链接(指向不存在的文件的符号链接),grep尝试在不存在的目标文件上进行搜索(因此得到正确而准确的错误消息)。
我通常不会在控制台执行系统管理任务时费心,但从脚本中我确实使用“find”查找文本文件,然后grep每一个:
find /etc -type f -exec grep -nHi -e "widehat" {} \;
而不是:
grep -nRHi -e "widehat" /etc