从grep中排除.svn目录

Kee*_*ist 188 linux svn bash grep

当我grep我的Subversion工作副本目录时,结果包括.svn目录中的许多文件.是否可以递归grep目录,但排除.svn目录中的所有结果?

小智 267

如果你有GNU Grep,它应该像这样工作:

grep --exclude-dir=".svn"
Run Code Online (Sandbox Code Playgroud)

如果碰巧是在没有GNU Grep的Unix系统上,请尝试以下方法:

grep -R "whatever you like" *|grep -v "\.svn/*" 
Run Code Online (Sandbox Code Playgroud)

  • 仅适用于gnu grep version> = 2.5.1a (18认同)
  • 在Windows版本的GNU Grep上,我不得不使用`--exclude-dir =\.svn` (6认同)
  • 哈.我正要上升,但我已经.好像我以前在这里:) (5认同)
  • 对于第二个例子+1,第一个对我用GNU grep 2.6.3不起作用,使用`export GREP_OPTIONS =" - exclude-dir = \".svn \" - nR --color"` (3认同)
  • `alias grepsvn ='grep --exclude-dir =".svn"'``grepsvn -R searchstring .` (2认同)

Bri*_*new 36

如果你使用ack('更好的grep')它会自动处理(并做很多其他聪明的事情!).非常值得一试.

  • 非常好的那个ack.注意,在Ubuntu和Linux Mint中,"ack"包与"ack - better grep"无关,它位于"ack-grep"包中. (9认同)
  • 确认+1.我有一个shell别名并默认使用它. (3认同)

osg*_*sgx 36

对于grep> = 2.5.1a

你可以把它放到你的环境中(例如.bashrc)

export GREP_OPTIONS='--exclude-dir=".svn"'
Run Code Online (Sandbox Code Playgroud)

PS:感谢Adrinan,我的版本中有额外的引号:

export GREP_OPTIONS='--exclude-dir=.svn'
Run Code Online (Sandbox Code Playgroud)

  • 你不需要双引号 - 当双引号存在时它对我没用 (2认同)

Max*_*tor 7

psychoschlumpf是正确的,但它只有你有最新版本的时候才有效grep.早期版本没有--exclude-dir选项.但是,如果你有一个非常大的代码库,那么双重操作grep可能需要永远.把它放在你.bashrc的无便携式.svngrep中:

alias sgrep='find . -path "*/.svn" -prune -o -print0 | xargs -0 grep'
Run Code Online (Sandbox Code Playgroud)

现在你可以这样做:

sgrep some_var
Run Code Online (Sandbox Code Playgroud)

......并获得预期的结果.

当然,如果你是一个疯狂的人喜欢我,谁只是拥有使用相同的.bashrc无处不在,你可以花费40小时的时间的过于复杂的bash函数,而不是放在那里. 或者,你可以等待像我这样疯狂的人在网上发布:

http://gist.github.com/573928