git grep theo phần mở rộng tệp


91

Tôi biết rằng, nếu tôi chỉ muốn tìm một mẫu trên các tệp có phần mở rộng nhất định, tôi có thể làm như sau:

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

Tôi cũng đang cố gắng tìm kiếm cách thực hiện việc này thông qua git grep (để tận dụng tốc độ của git grep từ các chỉ mục mà nó lưu trữ cùng với cây của nó), nhưng vô ích. Tôi thấy ở đây rằng không thể loại trừ một số loại tệp nhất định.

Câu trả lời:


145

Có, ví dụ:

git grep res -- '*.js'

4
Một sửa đổi chút ít - nếu bạn đang không ở trong thư mục gốc của kho lưu trữ của bạn, git grep res -- '/*.js'có thể là tốt hơn ...
twalberg

1
@twalberg: Nhưng nhận xét gợi ý rằng anh ấy muốn xem từ thư mục hiện tại [xuống], chắc chắn?
CB Bailey

3
Chỉ là thông tin bổ sung: Nếu bạn muốn chỉ định một tập hợp các phần mở rộng tệp, bạn có thể sử dụng, git grep res -- *.js *.csđiều này sẽ được đề cập trong một câu hỏi
stk_sfr

3
những gì --đạt được?
aehlke

1
Một điều quan trọng không thể quên là các dấu ngoặc kép xung quanh '* .js'. Nếu chúng không có ở đó, nó sẽ không hoạt động. (shell sẽ chặn nó trước khi nó đạt tới git).
hasen

3

Hãy thử làm điều này:

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

1
{}là tệp hiện tại và +có nghĩa là xử lý các đối số tối đa tại cùng một thời điểm không giống như {} \;(chỉ một tệp tại một thời điểm). Kiểm traman find
Gilles Quenot

Câu hỏi yêu cầu cho grep "git".
jok

0

nếu bạn muốn tìm kiếm trên tất cả các chi nhánh, bạn có thể sử dụng như sau:

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

(Tôi thấy bạn chỉ định git grep; đối với tôi, cách tiếp cận ở đây có vẻ đơn giản và dễ nhớ hơn - giống như các thao tác khác mà tôi thường cần).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.