2008-10-16 2 views
3

Мне нужно найти все файлы cpp/h в рабочей копии svn для «foo», за исключением специальных папок svn. Что такое команда для GNU grep?Быстрая рекурсивная grepping рабочей копии svn

+0

Как показывает Френтос, на ваш вопрос можно было бы легко ответить, если бы вы потратили время на консультации с страницами руководства. – freespace 2008-10-16 10:55:06

+2

Эй, freespace, почему бы просто не ответить на «простой» вопрос? Я с радостью принимаю ваш ответ, если он будет прав. – Constantin 2008-10-21 16:19:19

ответ

9

Я использую для этой цели ack, это как grep, но автоматически знает, как исключить каталоги управления источником (среди прочих полезных вещей).

+2

Обратите внимание, что пакет ack на Ubuntu/Debian на самом деле называется «ack-grep», так как есть конвертер кода кандзи под названием «ack». – JesperE 2008-10-16 11:08:07

1

Это RTFM. Я набрал «man grep» и «/ exclude» и получил:

--exclude = GLOB Пропустить файлы, базовое имя которых соответствует GLOB (с использованием подстановочного знака ). Имя файла glob может использовать *,? И [...] как подстановочные знаки и \ заказывать символ или символ обратной косой черты буквально.

--exclude-с = ФАЙЛОМ Пропустить файлы, базовое имя совпадает с любым из имен файлов комков чтения из файла (с использованием группового символа, как описано в --exclude).

--exclude-dir = DIR Исключить каталоги, соответствующие шаблону DIR, из рекурсивного поиска .

+1

RTFMing люди - это то, что вы делаете на usenet. SO отличается. Кстати, вы не ответили на вопрос. – Constantin 2008-10-16 11:43:22

7

Grep -ir --exclude-Dir = .svn Foo *

В рабочем каталоге будет делать. Опустите «i», если вы хотите, чтобы поиск был чувствительным к регистру.

Если вы хотите проверить только .cpp и .h файлы используют

Grep -ir --include = {.cpp, .h} --exclude-Dir = .svn Foo *

+0

Любая возможность заменить * на что-то, что соответствует только cpp/h? – Constantin 2008-10-16 11:47:50

2

Идя немного не по теме:

Если у вас есть рабочая копия с большим количеством неотслеживаемых файлов (т.е. не контроль версии) и вы только хотят искать источник контролируемых файлов, вы можете сделать

1

Я написал сценарий this, который я добавил в свой .bashrc. Он автоматически исключает SVN-каталоги из grep, находит и находит.

1

Я использую эти Баш псевдонимы для содержания оглавлению и файлов в SVN деревьев ... Я нахожу его более быстрым и приятным для поиска из командной строки (и использовать vim для кодирования), а не IDE GUI на основе:

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" 
} 
Смежные вопросы