我想查找foo
由SVN维护的大型文件系统中的所有事件,但我不希望匹配任何.svn
目录中包含的任何内容。
当我这样做grep -l -e 'foo' *
时,我得到立即匹配,但是当我尝试使用grep -l -e 'foo' --exclude-dir=".svn"
命令挂起svn目录时,它挂起了。
我究竟做错了什么?
我想查找foo
由SVN维护的大型文件系统中的所有事件,但我不希望匹配任何.svn
目录中包含的任何内容。
当我这样做grep -l -e 'foo' *
时,我得到立即匹配,但是当我尝试使用grep -l -e 'foo' --exclude-dir=".svn"
命令挂起svn目录时,它挂起了。
我究竟做错了什么?
Answers:
您可能对ack感兴趣。它会进行递归搜索(以及其他类似grep的操作),并且默认情况下会排除诸如.svn或.git之类的目录。
ag
,其相似但更快。
如果你不想给grep到的目录,例如.svn
以往你可以设置$GREP_OPTIONS
变量排除如下:
export GREP_OPTIONS="--exclude-dir=\*/.svn/\*"
只需将这一行添加到您的目录中.bashrc
,您的递归列表将不再进入.svn
目录。当然,它可以随您想要的丰富:
export GREP_OPTIONS="--exclude-dir=\*/.svn/\* --exclude-dir=\*/.hg/\* --exclude-dir=\*/.git/\* --exclude=\*~"
*
为.
,则更干净,以防万一还有其他隐藏文件夹需要搜索。