Jak mogę grepować rekursywnie?

Jak mogę rekurencyjnie grepować wszystkie katalogi i podkatalogi?

find . | xargs grep "texthere" *
Rozwiązanie
grep -r "texthere" .

Pierwszy parametr reprezentuje szukane wyrażenie regularne, drugi zaś katalog, który powinien zostać przeszukany. W tym przypadku, . oznacza bieżący katalog.

Uwaga: Działa to dla GNU grep, a na niektórych platformach, takich jak Solaris, musisz specjalnie użyć GNU grep, w przeciwieństwie do starszej implementacji. Dla Solarisa jest to polecenie ggrep.

Komentarze (11)

Jeśli znasz rozszerzenie lub wzór pliku, który chcesz, inną metodą jest użycie opcji --include:

grep -r --include "*.txt" texthere .

Możesz również wymienić pliki do wykluczenia za pomocą opcji --exclude.

Ag

Jeśli często przeszukujesz kod, Ag (The Silver Searcher) jest znacznie szybszą alternatywą dla grepa, która'jest dostosowana do przeszukiwania kodu. Na przykład, jest on domyślnie rekurencyjny i automatycznie ignoruje pliki i katalogi wymienione w .gitignore, więc nie trzeba ciągle podawać tych samych kłopotliwych opcji wykluczania do grepa lub find.

Komentarze (7)

Również:

find ./ -type f -print0 | xargs -0 grep "foo"

ale grep -r jest lepszą odpowiedzią.

Komentarze (10)