Używam rekurencyjnego grep do znajdowania plików źródłowych o określonej zawartości.
grep -Rni "myfunc" .
W przypadku dużych baz kodu może to być wolne, więc używam --incldue do ograniczenia / dodawania do białej listy.
grep -Rni --include=*.java "myfunc" .
Wydaje mi się jednak, że skuteczniej byłoby wykluczyć (przyciąć) całe podkatalogi:
grep -Rni --exclude=/.svn/ "myfunc" .
Ale opcja --exclude obsługuje tylko wzorce plików, takie jak * .java powyżej. Jak mogę wykluczyć katalogi?
linux
command-line
grep
gabor
źródło
źródło
Źródło: https://stackoverflow.com/questions/2799246/grep-exclusion-a-specific-folder-using
źródło
./dev
zostaną wykluczone W POŁĄCZENIU./foo/bar/dev
. Użyj,--exclude-dir=./dev
aby zastosować tylko w pierwszym przypadku.bash grep -r --exclude-dir={dev,sys,proc} PATTERN data
Jedynym problemem z globbingiem jest to, że nie mogę zmusić go do działania w moim bashu. W takim przypadku muszę je rozdzielić.{}
pojedynczego wpisu, prawdopodobnie potrzebujesz jednoargumentowego przecinka, aby uczynić go tablicą (nie jestem pewien, jak Bash sobie z tym radzi). Zamiast tego stworzyłem alias w moim .bash_aliases, który zapętla się nad listą folderów, które zwykle zawsze chcę wykluczyć, np. .Git, .svn, .hg, .cache, a następnie dodaję je za pomocą pętli z--exclude-dir $dir
a następnie rozwiń tę tablicę do aliasu grep.zamiast tego możesz użyć find:
OK, więc to trochę wstecz, najpierw otrzymujesz wyniki grep, a potem ścieżkę. Może ktoś inny ma lepszą odpowiedź?
źródło
Oto pełny przykład skryptu z jednego z moich projektów, który może pomóc, nazywam ten plik „all_source” (oznaczony jako wykonywalny) i umieszczam go w katalogu głównym mojego projektu, a następnie nazywam go tak, jakby
grep myfunc $(./all_source)
sortowanie na końcu skryptu było całkowicie opcjonalny.Ten skrypt zwraca wszystkie nazwy plików w projekcie, które pasują
*.h, *.cpp, *.c, *.lua, *.*awk
, ale nie wyszukuje we wszystkich folderach o nazwach .svn i foldery gen, a także pomija foldery./lib
i./vc6
(ale tylko te bezpośrednio z katalogu głównego projektu). Więc kiedy to zrobiszgrep myfunc $(./all_source)
, tylko greps w tych plikach. Musisz to również wywołać z katalogu głównego projektu.źródło
Istnieje również opcja -prune, aby znaleźć:
źródło
Możesz spróbować to zrobić:
Np .: Jeśli nie chcesz przeszukiwać zawartości plików dziennika, wykonaj następujące czynności:
źródło