คุณช่วยยกตัวอย่างการใช้คำสั่ง tree เพื่อกรองผลลัพธ์ดังนี้
- ที่จะไม่สนใจไดเรกทอรี (พูด
bin
,unitTest
) - เพียงรายชื่อไฟล์บางอย่างที่มีส่วนขยาย (พูด
.cpp
,.c
,.hpp
,.h
) - การระบุชื่อพา ธ แบบเต็มของไฟล์ผลลัพธ์เฉพาะที่ตรงกับเกณฑ์
คุณช่วยยกตัวอย่างการใช้คำสั่ง tree เพื่อกรองผลลัพธ์ดังนี้
bin
, unitTest
).cpp
, .c
, .hpp
, .h
)คำตอบ:
วิธีหนึ่งคือการใช้รูปแบบกับ-I
และ-P
สวิตช์:
tree -f -I "bin|unitTest" -P "*.[ch]|*.[ch]pp." your_dir/
-f
พิมพ์เส้นทางแบบเต็มสำหรับแต่ละไฟล์และ-I
ไม่รวมไฟล์ในรูปแบบที่นี่คั่นด้วยแถบแนวตั้ง -P
สวิตช์ inlcudes เฉพาะไฟล์ที่อยู่ในรูปแบบที่ตรงกับส่วนขยายบางอย่าง
sed: illegal option -- I
ใช้find
และtree
คำสั่งที่ใช้ find's prune
เพื่อแยกไดเร็กทอรีของการค้นหาและใช้tree -P
สำหรับการค้นหารูปแบบ
ใช้สวิตช์ลูกพรุนตัวอย่างเช่นหากคุณต้องการแยกmisc
ไดเรกทอรีเพียงเพิ่ม-path ./misc -prune -o
คำสั่ง find ของคุณ
สำหรับเช่น find . -path ./misc -prune -o -exec tree -P <pattern> {} \;
หรือคุณสามารถใช้-name "*.cpp" in find
สำหรับการยกเว้นหลายไดเรกทอรีใช้
find . -type d \( -path dir1 -o -path dir2 -o -path dir3 \) -prune -o
find . -type d \( -path dir1 -o -path dir2 -o -path dir3 \) -prune -o
หรือแค่find . -path ./misc -prune -o -exec tree -P *.cpp {} \;
ทางออกที่แท้จริงคือการส่งออกเส้นทางเต็มกรองเส้นทางที่ไม่พึงประสงค์ออกและสุดท้ายแก้ไขผลลัพธ์
tree -df | egrep -v "\./(bin|unitTest)/.*" | sed -r 's%\./.*/%%g'
หากไฟล์ทั้งหมดจำเป็นในผลลัพธ์ให้ลบพารามิเตอร์ "d"
คำอธิบายโดยละเอียดสามารถดูได้ที่: http://qaon.net/press/archives/572หากคุณเข้าใจภาษาญี่ปุ่นได้
-I bin
-I bin/