/ Align = "left" / katalogi svn z grep [duplikat]

To pytanie ma już odpowiedź tutaj:

Kiedy grep mój Subversion working copy katalog, Wyniki zawierają wiele plików z .katalogi svn. Czy można rekurencyjnie grepować katalog, ale wykluczyć wszystkie wyniki z .katalogi svn?

Author: Tunaki, 2009-09-29

11 answers

Jeśli masz GNU Grep, powinno to działać tak:

grep --exclude-dir=".svn"

Jeśli zdarzy się, że jest na systemie Unix bez GNU Grep, spróbuj wykonać następujące czynności:

grep -R "whatever you like" *|grep -v "\.svn/*" 
 264
Author: psychoschlumpf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-04 23:52:30

Jeśli użyjesz ack ('lepszego grepa'), poradzi sobie z tym automatycznie (i zrobi wiele innych mądrych rzeczy!). Warto to sprawdzić.

 36
Author: Brian Agnew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-29 09:36:30

Dla grep >=2.5.1 a

Możesz umieścić to w swoim środowisku (np. .bashrc)

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

PS: dzięki Adrinanowi, w mojej wersji są dodatkowe cytaty:

export GREP_OPTIONS='--exclude-dir=.svn'
 34
Author: osgx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-14 15:33:42

Psychoschlumpf jest poprawny, ale działa tylko wtedy, gdy masz najnowszą wersję grep. Wcześniejsze wersje nie posiadają opcji --exclude-dir. Jednak, jeśli masz bardzo duży kod, podwójne-grep - ing może trwać wieczność. Wrzuć to do swojego .bashrc dla przenośnego .svn-mniej grepa:

alias sgrep='find . -path "*/.svn" -prune -o -print0 | xargs -0 grep'

Teraz możesz to zrobić:

sgrep some_var

... i uzyskać oczekiwane rezultaty.

Oczywiście, jeśli jesteś szaloną osobą jak ja, która po prostu mA używać tego samego .bashrc wszędzie, możesz wydać 4 godziny pisania zbyt skomplikowanej funkcji bash, aby umieścić tam zamiast tego. lub , możesz po prostu poczekać, aż taka szalona osoba jak ja zamieści to w Internecie:

Http://gist.github.com/573928

 7
Author: Max Cantor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-10 16:30:03
grep --exclude-dir=".svn"

Działa, ponieważ nazwa".svn " jest raczej wyjątkowy. Ale to może się nie udać w przypadku bardziej uogólnionej nazwy.

grep --exclude-dir="work"

Nie jest kuloodporny, jeśli masz "/ home / user / work " I "/ home/user/stuff / work" to pominie oba. Nie można zdefiniować " / * / work/*" aby ograniczyć wykluczenie tylko do poprzedniej nazwy folderu. O ile mogłem poeksperymentować, w GNU grep proste --exclude nie wyklucza katalogów.

 2
Author: karatedog,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-21 21:57:57

Na moim GNU grep 2.5, --exclude-dirs nie jest poprawną opcją. Jako alternatywę, to działało dobrze dla mnie:

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

Powinno to być lepszym rozwiązaniem niż wykluczenie wszystkich linii zawierających .svn/, ponieważ nie byłoby przypadkowego odfiltrowania takich linii w prawdziwym pliku.

 2
Author: user193130,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-04 16:00:15

Dwa grepy dadzą radę:

  1. pierwszy grep dostanie wszystko.
  2. Drugi grep użyje wyjścia pierwszego grepa jako wejścia (poprzez Orurowanie). Używając flagi-v, grep wybierze wiersze, które nie pasują do wyszukiwanych terminów. Voila. Zostajesz z wszystkimi ouputami z pierwszego grepa, które nie zawierają .svn w ścieżce plików.

    - v, --invert-match Odwróć sens dopasowania, aby wybrać niepasujące linie.

    grep the_text_you_want_to_search_for * | grep -v .svn
    
 1
Author: Joseph Huttner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-11 17:02:35

Próbowałem double grep ' in na mojej ogromnej bazie kodów i zajęło mi to wieczność, więc dostałem to rozwiązanie z pomocą mojego współpracownika

Przycinanie jest znacznie szybsze, ponieważ zatrzymuje Finda od przetwarzania tych katalogów w porównaniu do 'grep-v', który przetwarza wszystko i wyklucza wyświetlanie wyników

find . -name .svn -prune -o -type f -print0 | xargs -0 egrep 'YOUR STRING'

Możesz również nazwać to polecenie aliasem w swoim .bashrc as

alias sgrep='find . -name .svn build -prune -o -type f -print0 | xargs -0 egrep '

Teraz po prostu użyj

sgrep 'whatever' 
 1
Author: Sid Sarasvati,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-15 03:13:02

Inną opcją, aczkolwiek taką, która może nie być postrzegana jako akceptowalna jest sklonowanie repo do Gita i użycie git grep.

Rzadko spotykam repozytoria svn, które są tak ogromne, że klonowanie przez git-svn jest niepraktyczne. W tych rzadkich przypadkach używam podwójnego rozwiązania grep, svngrep , ale jak wiele odpowiedzi tutaj wskazuje, może to być powolne w dużych repozytoriach i wykluczać'.SVN ' wystąpienia, które nie są katalogami. Argumentowałbym, że byłoby to niezwykle rzadko jednak...

Również jeśli chodzi o powolne działanie wielu grepów, po użyciu czegoś takiego jak git, w svn wszystko wydaje się wolne!

Ostatnia rzecz.., moja odmiana svngrep przechodzi przez koloryzację, Uwaga, realizacja jest brzydka! Mniej więcej grep -rn "$what" $where | egrep -v "$ignore" | grep --color "$what"
 1
Author: quickshiftin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-30 01:34:43

Dla grepa w wersji 2.5.1 można dodać wiele elementów --exclude, aby odfiltrować pliki .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 ./
 0
Author: ZaSter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-23 01:15:40

Myślę, że opcja -- exclude rekurencji jest tym, czego szukasz.

 -1
Author: Patrice Bernassola,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-29 09:43:56