Cách liệt kê tất cả các tệp nguồn (* .c, * .cpp, * .h)


15

Tôi muốn tìm các tệp nguồn (* .c, * .cpp, * .h) có trong Linux / MinGW / Cygwin và đệ quy trong tất cả các thư mục con.

Ý tưởng cơ bản của tôi là sử dụng findgrep. Tuy nhiên, việc xây dựng một biểu thức chính quy có thể kiểm tra tên tệp đã cho là * .c, * .cpp hoặc * .h không dễ dàng. Ông có thể giúp tôi không?

Câu trả lời:


14

Điều này sẽ làm việc:

find Linux/MinGW/Cygwin -name '*.c' -o -name '*.cpp' -o -name '*.h'


1

Tôi sẽ dùng:

find . -regex '.*\.\(c\|cpp\|h\)$' -print

1
Trong macbook của tôi, kịch bản không -Ecó gì không thể tìm thấy. bạn có thể cần thêm một -E (như mở rộng) để làm cho nó dễ mang theo hơn, giống như find -E . -regex '.*\.(c|h|cpp)' -print. ;-)
pambda

1

Nhanh và bẩn, và tránh tên thư mục:

find . -type f -name *.[c\|h]

2
Có ba vấn đề với lệnh này: 1. Nó sẽ không tìm thấy *.cpptệp. 2. Nó sẽ tìm *.|tập tin. 3. Toàn cầu sẽ mở rộng nếu có các tệp phù hợp trong thư mục hiện tại. Trích dẫn ngăn chặn điều đó.
Dennis

1

Bạn có thể sử dụng regex đơn giản hơn một chút:

find . -type f -regex ".*\.[ch]\(pp\)?$"

0

Tôi sử dụng mac pro cũng hoạt động trong bash. Nhưng mỗi khi tôi gõ dòng lệnh:

find -name

Nó nói tùy chọn bất hợp pháp. Vì vậy, tôi chỉ đơn giản hóa nó là:

find *.c *.cpp *.h

và tìm thấy nó thực sự làm việc!

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.