这个问题已经在这里有一个答案:
- 我怎样才能排除的grep -R目录? 12个回答
当我用grep我的Subversion工作拷贝目录,结果包括很多来自.svn目录文件。 是否有可能递归的grep的目录,但排除.svn目录的所有结果?
这个问题已经在这里有一个答案:
当我用grep我的Subversion工作拷贝目录,结果包括很多来自.svn目录文件。 是否有可能递归的grep的目录,但排除.svn目录的所有结果?
如果你有GNU grep的,它应该像这样工作:
grep --exclude-dir=".svn"
如果碰巧在没有GNU grep的UNIX系统中,请尝试以下操作:
grep -R "whatever you like" *|grep -v "\.svn/*"
如果你使用ACK (一个“更好的grep”),它会自动处理(和做很多其他聪明的事情呢!)。 这是很值得一试。
对于把手> = 2.5.1a
你可以把你的环境中,这(如.bashrc
)
export GREP_OPTIONS='--exclude-dir=".svn"'
PS:感谢Adrinan,也有我的版本额外的引号:
export GREP_OPTIONS='--exclude-dir=.svn'
psychoschlumpf是正确的,但如果你有最新版本的它只能grep
。 早期版本没有--exclude-dir
选项。 但是,如果你有一个非常大的代码库,双grep
-ing可以永远走。 在放弃这一.bashrc
的便携式.svn
稀少的grep:
alias sgrep='find . -path "*/.svn" -prune -o -print0 | xargs -0 grep'
现在,你可以这样做:
sgrep some_var
...并取得预期的结果。
当然,如果你是一个疯狂的人喜欢我,谁只是必须使用相同的.bashrc
无处不在,你可以花费40小时的时间的过于复杂的bash函数,而不是放在那里。 或者 ,你可以只是等待一个疯狂的人跟我一样,以发布到网上:
http://gist.github.com/573928
grep --exclude-dir=".svn"
因为作品的名字“.svn文件”是相当独特的。 但是,这可能会失败在一个更广义的名称。
grep --exclude-dir="work"
是不是防弹的,如果你有“/ home / user中/工作”和“/ home / user中/材料/作品”它会跳过这两者。 这是不可能定义“/ * /工作/ *”来排除限制仅是前者的文件夹名称。 至于我可以尝试,在GNU的grep简单 - 排除将不排除目录。
在我的GNU的grep 2.5, --exclude-dirs
是不是一个有效的选项。 作为替代方案,这个工作很适合我:
grep --exclude="*.svn-base"
这应该是不是排除包含所有行更好的解决方案.svn/
因为它不会意外地在一个真正的文件过滤掉这些线路。
二里grep将这样的伎俩:
第二grep的将使用第一的grep输出作为输入(经由管道)。 通过使用-v标志,grep的将选择不匹配搜索条件的行。 瞧。 你留下了从第一grep的一切。OUPUTS不中的文件路径包含的.svn。
-v,--invert匹配倒置匹配的意义上,以选择非匹配线。
用grep the_text_you_want_to_search_for * | grep的-v的.svn
我想对我的巨大的代码库双grep'in,它永远了,所以我就和我的同事的帮助,这种解决方案
修剪的速度要快得多,因为它会阻止比较“的grep -v”,这一切都处理,只有排除显示效果处理这些目录中找到
find . -name .svn -prune -o -type f -print0 | xargs -0 egrep 'YOUR STRING'
您还别名在你的.bashrc这个命令能
alias sgrep='find . -name .svn build -prune -o -type f -print0 | xargs -0 egrep '
现在只需使用
sgrep 'whatever'
可能不被视为可接受的答案另一种选择,虽然一个是回购克隆到GIT中,并使用git grep
。
很少,我碰上SVN仓库是如此庞大,它只是不切实际通过克隆git-svn
。 在这些罕见的情况下,我使用的是双grep的解决方案, svngrep ,但在这里尽可能多的回答表明,这可能是缓慢的大型仓库,并排除“的.svn”事件不属于目录。 我认为,这将是非常难得,虽然...
另外,关于多里grep的性能下降,一旦你使用类似的git,几乎一切都似乎在SVN慢!
最后一件事...,我svngrep的变化经过着色,提防,实现是太丑了! 粗略grep -rn "$what" $where | egrep -v "$ignore" | grep --color "$what"
grep -rn "$what" $where | egrep -v "$ignore" | grep --color "$what"
对于grep的2.5.1版本,你可以添加多个--exclude
项目筛选出.svn
文件。
$ grep -V | grep grep
grep (GNU grep) 2.5.1
GREP_OPTIONS="--exclude=*.svn-base --exclude=entries --exclude=all-wcprops" grep -l -R whatever ./
我认为递归的--exclude选项你要搜索的内容。