git grep за розширеннями файлів


91

Я знаю, що якби я хотів отримати grep для шаблону лише для файлів з певними розширеннями, я міг зробити це:

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

Я намагався знайти спосіб зробити це також за допомогою git grep (щоб скористатися швидкістю git grep з індексів, які він зберігає у своєму дереві), але безуспішно. Я бачив тут , що за винятком деяких типів файлів не представляється можливим.

Відповіді:


145

Так, наприклад:

git grep res -- '*.js'

4
Одна невелика модифікація - якщо ви не в корені вашого сховища, git grep res -- '/*.js'можливо, буде краще ...
twalberg

1
@twalberg: Але коментар припускає, що він хоче шукати з поточного каталогу [вниз], звичайно?
CB Bailey

3
Просто додаткова інформація: якщо ви хочете вказати набір розширень файлів, ви можете використовувати git grep res -- *.js *.csце, це висвітлено в іншому питанні
stk_sfr

3
що робить --?
aehlke

1
Важливо не забути про єдині лапки навколо '* .js'. Якщо їх там немає, це не спрацює. (оболонка перехопить його до досягнення git).
hasen

3

Спробуйте зробити це:

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

1
{}є поточним файлом і +означає обробляти максимум аргументів одночасно на відміну від {} \;(лише одного файлу одночасно). Чекman find
Жиль Квенот

Питання задає greit "git".
Джок,

0

якщо ви хочете здійснити пошук по всіх гілках, ви можете використовувати наступне:

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

(Я бачу, ви вказуєте git grep; мені підхід тут здається простішим і легшим для запам'ятовування - більше схожим на інші операції, які мені часто потрібні.)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.