คำสั่งต้นไม้สำหรับหลายรวมและไม่รวม


33

คุณช่วยยกตัวอย่างการใช้คำสั่ง tree เพื่อกรองผลลัพธ์ดังนี้

  • ที่จะไม่สนใจไดเรกทอรี (พูดbin, unitTest)
  • เพียงรายชื่อไฟล์บางอย่างที่มีส่วนขยาย (พูด.cpp, .c, .hpp, .h)
  • การระบุชื่อพา ธ แบบเต็มของไฟล์ผลลัพธ์เฉพาะที่ตรงกับเกณฑ์

คำตอบ:


54

วิธีหนึ่งคือการใช้รูปแบบกับ-Iและ-Pสวิตช์:

tree -f -I "bin|unitTest" -P "*.[ch]|*.[ch]pp." your_dir/

-fพิมพ์เส้นทางแบบเต็มสำหรับแต่ละไฟล์และ-Iไม่รวมไฟล์ในรูปแบบที่นี่คั่นด้วยแถบแนวตั้ง -Pสวิตช์ inlcudes เฉพาะไฟล์ที่อยู่ในรูปแบบที่ตรงกับส่วนขยายบางอย่าง


6
หมายเหตุ: ไม่รวมลากทับใน -i ธงของคุณเช่นไม่-I bin -I bin/
ThorSummoner

สิ่งนี้ทำให้เกิดข้อผิดพลาดsed: illegal option -- I
François Romain

4

ใช้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 ให้ข้อผิดพลาด "find: คาดหวังนิพจน์หลัง '-o'"
ดูแลเว็บ

คุณลองfind . -type d \( -path dir1 -o -path dir2 -o -path dir3 \) -prune -oหรือแค่find . -path ./misc -prune -o -exec tree -P *.cpp {} \;
harish.venkat

2

ทางออกที่แท้จริงคือการส่งออกเส้นทางเต็มกรองเส้นทางที่ไม่พึงประสงค์ออกและสุดท้ายแก้ไขผลลัพธ์

tree -df | egrep -v "\./(bin|unitTest)/.*" | sed -r 's%\./.*/%%g'

หากไฟล์ทั้งหมดจำเป็นในผลลัพธ์ให้ลบพารามิเตอร์ "d"

คำอธิบายโดยละเอียดสามารถดูได้ที่: http://qaon.net/press/archives/572หากคุณเข้าใจภาษาญี่ปุ่นได้


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