/ Align = "left" / katalogi svn z grep [duplikat]
To pytanie ma już odpowiedź tutaj:
- Jak mogę wykluczyć katalogi z grep-r? 12 odpowiedzi
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?
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/*"
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ć.
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'
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:
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.
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.
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ę:
- pierwszy grep dostanie wszystko.
-
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
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'
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ęcejgrep -rn "$what" $where | egrep -v "$ignore" | grep --color "$what"
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 ./
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.
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