Tôi muốn grep tất cả các tập tin ngoại trừ một số loại tập tin?


36

Làm cách nào để tôi đệ quy grepcác tệp trong một thư mục nhất định ngoại trừ một vài loại tệp?

Ví dụ: tôi đang tìm kiếm một chuỗi trong thư mục không gian làm việc của mình nhưng cuối cùng nó lại tìm kiếm bên trong các tệp sql và tạo ra các chuỗi nối tiếp.

Vì vậy, trong trường hợp này, tôi muốn grepthư mục không gian làm việc ngoại trừ các tệp sql.

Tôi tốt nhất là tìm kiếm một lót nếu có thể.


5
Xin lưu ý rằng Linux và Unix và unix-a-like không thực sự có "loại tệp" theo cách bạn muốn. Theo quy ước, tên tệp có hậu tố ".c" hoặc ".txt" hoặc ".sql" - những hậu tố đó thậm chí không có "phần mở rộng" kiểu Windows, ít hơn các chỉ số mà mã nguồn SQL hoặc văn bản hoặc mã C sống bên trong các tập tin.
Bruce Ediger

Câu trả lời:



8

Điều này sẽ làm điều đó cho bạn và loại trừ các tệp .sql và .txt:

find /some/dir -type f ! -name '*\.sql' ! -name '*.txt' -print0 | xargs -0 grep 'foobar'

Tuy nhiên, có vẻ như ack sẽ là một công cụ tốt hơn nhiều cho những gì bạn đang cố gắng thực hiện:

ack -a --nosql 'foobar' /some/dir

Xin lỗi, tôi đã không thấy phần 'ack' và đưa nó vào câu trả lời của tôi, hiện đã bị xóa.
Cơ hội

Một người dùng ghi chú rằng ack - a --nobinarybao gồm tập tin nhị phân
Michael Mrozek

Dấu gạch chéo ngược trong mẫu tên tệp là không cần thiết.
Kusalananda
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.