git grep według rozszerzeń plików


91

Wiem, że gdybym chciał grepować dla wzorca tylko na plikach z określonymi rozszerzeniami, mógłbym to zrobić:

// searches recursively and matches case insensitively in only javascript files
// for "res" from the current directory
grep -iIr --include=*.js res ./

Próbowałem również znaleźć sposób, aby to zrobić za pomocą git grep (aby skorzystać z szybkości git grep z indeksów, które przechowuje wraz ze swoim drzewem), ale bezskutecznie. Widziałem tutaj, że wykluczenie niektórych typów plików nie jest możliwe.

Odpowiedzi:


145

Tak, na przykład:

git grep res -- '*.js'

4
Jedna drobna modyfikacja - jeśli nie jesteś w katalogu głównym repozytorium, git grep res -- '/*.js'może być lepiej ...
twalberg

1
@twalberg: Ale komentarz sugeruje, że na pewno chce spojrzeć z bieżącego katalogu [w dół]?
CB Bailey

3
Tylko dodatkowe informacje: Jeśli chcesz określić zestaw rozszerzeń plików, możesz użyć git grep res -- *.js *.cstego w innym pytaniu
stk_sfr,

3
co to daje --?
aehlke

1
Ważną rzeczą, o której należy pamiętać, są pojedyncze cudzysłowy wokół „* .js”. Jeśli ich tam nie ma, to nie zadziała. (powłoka przechwyci go, zanim dotrze do git).
zakończył się

3

Spróbuj to zrobić:

find . -type f -iname '*.js' -exec grep -i 'pattern' {} +

1
{}jest bieżącym plikiem i +oznacza traktowanie maksymalnej liczby argumentów w tym samym czasie, inaczej niż {} \;(tylko jeden plik na raz). Checkman find
Gilles Quenot

Pytanie dotyczy „git” grep.
żart

0

jeśli chcesz wyszukiwać we wszystkich oddziałach, możesz skorzystać z:

git log -Sres --all --name-only -- '*.js'

(Widzę, że określasz git grep; dla mnie podejście tutaj wydaje się prostsze i łatwiejsze do zapamiętania - bardziej jak inne operacje, których potrzebuję często.)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.