คุณช่วยยกตัวอย่างการใช้คำสั่ง 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/