svn工作副本的快速递归grepping

时间:2008-10-16 10:48:00

标签: windows svn bash grep

我需要在svn工作副本中搜索“foo”中的所有cpp / h文件,完全不包括svn的特殊文件夹。 GNU grep的完全命令是什么?

6 个答案:

答案 0 :(得分:9)

我为此目的使用ack,它就像grep但自动知道如何排除源控制目录(以及其他有用的东西)。

答案 1 :(得分:7)

grep -ir --exclude-dir = .svn foo *

在工作目录中会这样做。 如果您希望搜索区分大小写,请忽略“i”。

如果您只想检查.cpp和.h文件,请使用

grep -ir --include = { .cpp, .h} --exclude-dir = .svn foo *

答案 2 :(得分:2)

偏离主题:

如果你有一份包含大量未跟踪文件的工作副本(即不受版本控制),并且想要搜索源控制文件,你可以这样做

svn ls -R | xargs -d '\n' grep <string-to-search-for>

答案 3 :(得分:1)

这是一个RTFM。我键入'man grep'和'/ exclude'并得到:

- 排除= GLOB           跳过基本名称与GLOB匹配的文件(使用通配符)           匹配)。文件名glob可以使用*,?和[...]作为           通配符和\,引用通配符或反斜杠字符           字面上。

- 排除-从= FILE           跳过基本名称与任何文件名称globs匹配的文件           从FILE读取(使用通配符匹配,如下所述)           --exclude)。

- 排除-DIR = DIR           从递归中排除与模式DIR匹配的目录           搜索。

答案 4 :(得分:1)

我写了this脚本,我已将其添加到我的.bashrc中。它会自动从grep,find和locate中排除SVN目录。

答案 5 :(得分:1)

我使用这些bash别名来搜索svn树中的内容和文件...我发现从命令行搜索更快更愉快(并使用vim进行编码)而不是基于GUI的IDE :

s () {
    local PATTERN=$1
    local COLOR=$2
    shift; shift;
    local MOREFLAGS=$*

    if  ! test -n "$COLOR" ; then
        # is stdout connected to terminal?
        if test -t 1; then
            COLOR=always
        else
            COLOR=none
        fi
    fi

    find -L . \
        -not \( -name .svn -a -prune \) \
        -not \( -name templates_c -a -prune \) \
        -not \( -name log -a -prune \) \
        -not \( -name logs -a -prune \) \
        -type f \
        -not -name \*.swp \
        -not -name \*.swo \
        -not -name \*.obj \
        -not -name \*.map \
        -not -name access.log \
        -not -name \*.gif \
        -not -name \*.jpg \
        -not -name \*.png \
        -not -name \*.sql \
        -not -name \*.js \
        -exec grep -iIHn -E --color=${COLOR} ${MOREFLAGS} -e "${PATTERN}" \{\} \;
}

# s foo | less
sl () {
    local PATTERN=$*
    s "$PATTERN" always | less
}

# like s but only lists the files that match
smatch () {
    local PATTERN=$1
    s $PATTERN always -l
}

# recursive search (filenames) - find file
f () {
    find -L . -not \( -name .svn -a -prune \) \( -type f -or -type d \) -name "$1"
}