วิธีแสดงรายการไฟล์ต้นฉบับทั้งหมด (* .c, * .cpp, * .h)


15

ฉันต้องการหาไฟล์ต้นฉบับ (* .c, * .cpp, * .h) ที่มีใน Linux / MinGW / Cygwin และเรียกซ้ำในไดเรกทอรีย่อยทั้งหมด

พื้นฐานความคิดของฉันคือการใช้และfind grepอย่างไรก็ตามการสร้างนิพจน์ทั่วไปที่สามารถตรวจสอบชื่อไฟล์ที่กำหนดคือ * .c, * .cpp หรือ * .h นั้นไม่ใช่เรื่องง่าย คุณช่วยฉันออก

คำตอบ:



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

อะไร$ในตอนท้ายของคำสั่งทำอย่างไร
อาลี

2
@Ali: เชื่อมโยง regex ไปที่ท้ายบรรทัด (ป้องกันการค้นหาไฟล์ที่มีชื่อfoo.cpp.old)
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

1

ฉันจะใช้:

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

1
ใน macbook ของฉันสคริปต์ที่ไม่มี-Eสิ่งใดไม่สามารถค้นหาได้ คุณอาจต้องเพิ่ม -E (ตามที่ขยาย) find -E . -regex '.*\.(c|h|cpp)' -printเพื่อให้พกพามากขึ้นเช่นเดียวกับ ;-)
pambda

1

รวดเร็วและสกปรกและหลีกเลี่ยงชื่อไดเรกทอรี:

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

2
มีสามปัญหาเกี่ยวกับคำสั่งนี้: 1. มันจะไม่พบ*.cppไฟล์ 2. มันจะค้นหา*.|ไฟล์ 3. glob จะขยายหากมีไฟล์ที่ตรงกันในไดเรกทอรีปัจจุบัน การอ้างป้องกันนั้น
เดนนิส


0

ฉันใช้ mac pro ซึ่งทำงานด้วยการทุบตี แต่ทุกครั้งที่ฉันพิมพ์ในบรรทัดคำสั่ง:

find -name

มันบอกว่าตัวเลือกที่ผิดกฎหมาย ดังนั้นฉันจึงทำให้มันง่ายขึ้นเป็น:

find *.c *.cpp *.h

และพบว่ามันใช้งานได้จริง!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.