从grep的排除.svn目录[复制](Exclude .svn directories from g

2019-07-20 01:12发布

这个问题已经在这里有一个答案:

  • 我怎样才能排除的grep -R目录? 12个回答

当我用grep我的Subversion工作拷贝目录,结果包括很多来自.svn目录文件。 是否有可能递归的grep的目录,但排除.svn目录的所有结果?

Answer 1:

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

grep --exclude-dir=".svn"

如果碰巧在没有GNU grep的UNIX系统中,请尝试以下操作:

grep -R "whatever you like" *|grep -v "\.svn/*" 


Answer 2:

如果你使用ACK (一个“更好的grep”),它会自动处理(和做很多其他聪明的事情呢!)。 这是很值得一试。



Answer 3:

对于把手> = 2.5.1a

你可以把你的环境中,这(如.bashrc

export GREP_OPTIONS='--exclude-dir=".svn"'

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

export GREP_OPTIONS='--exclude-dir=.svn'


Answer 4:

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



Answer 5:

grep --exclude-dir=".svn"

因为作品的名字“.svn文件”是相当独特的。 但是,这可能会失败在一个更广义的名称。

grep --exclude-dir="work"

是不是防弹的,如果你有“/ home / user中/工作”和“/ home / user中/材料/作品”它会跳过这两者。 这是不可能定义“/ * /工作/ *”来排除限制仅是前者的文件夹名称。 至于我可以尝试,在GNU的grep简单 - 排除将不排除目录。



Answer 6:

在我的GNU的grep 2.5, --exclude-dirs是不是一个有效的选项。 作为替代方案,这个工作很适合我:

grep --exclude="*.svn-base"

这应该是不是排除包含所有行更好的解决方案.svn/因为它不会意外地在一个真正的文件过滤掉这些线路。



Answer 7:

二里grep将这样的伎俩:

  1. 第一个grep的将得到一切。
  2. 第二grep的将使用第一的grep输出作为输入(经由管道)。 通过使用-v标志,grep的将选择不匹配搜索条件的行。 瞧。 你留下了从第一grep的一切。OUPUTS不中的文件路径包含的.svn。

    -v,--invert匹配倒置匹配的意义上,以选择非匹配线。

      用grep the_text_you_want_to_search_for * |  grep的-v的.svn 


Answer 8:

我想对我的巨大的代码库双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' 


Answer 9:

可能不被视为可接受的答案另一种选择,虽然一个是回购克隆到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"



Answer 10:

对于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 ./


Answer 11:

我认为递归的--exclude选项你要搜索的内容。



文章来源: Exclude .svn directories from grep [duplicate]