lệnh cây cho nhiều bao gồm và loại trừ


33

Bạn có thể vui lòng cho tôi một ví dụ về việc sử dụng lệnh cây để lọc kết quả như sau:

  • để bỏ qua các thư mục (nói bin, unitTest)
  • chỉ liệt kê một số tập tin có phần mở rộng (ví dụ .cpp, .c, .hpp, .h)
  • cung cấp tên đường dẫn đầy đủ của chỉ các tệp kết quả phù hợp với tiêu chí.

Câu trả lời:


54

Một cách là sử dụng các mẫu với -Ivà các -Pcông tắc:

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

Bản -fin đường dẫn đầy đủ cho mỗi tệp và -Iloại trừ các tệp trong mẫu ở đây được phân tách bằng một thanh dọc. Công -Ptắc chỉ bao gồm các tệp được liệt kê trong mẫu khớp với một phần mở rộng nhất định.


6
Lưu ý: không bao gồm dấu gạch chéo trong cờ -I của bạn, ví dụ: -I binkhông -I bin/.
ThorSummoner

điều này gây ra lỗised: illegal option -- I
François Romain

4

sử dụng findtreelệnh được sử dụng find pruneđể loại trừ các thư mục tìm kiếm và sử dụng tree -Pđể tìm kiếm mẫu.

Sử dụng công tắc cắt tỉa, ví dụ nếu bạn muốn loại trừ miscthư mục chỉ cần thêm a -path ./misc -prune -ovào lệnh find của bạn.

ví dụ find . -path ./misc -prune -o -exec tree -P <pattern> {} \;hoặc bạn có thể sử dụng-name "*.cpp" in find

để loại trừ nhiều thư mục sử dụng

find . -type d \( -path dir1 -o -path dir2 -o -path dir3 \) -prune -o


Đối với tôi, ví dụ với find đưa ra lỗi "find: mong đợi một biểu thức sau '-o'"
WebComer

bạn đã thử chỉ find . -type d \( -path dir1 -o -path dir2 -o -path dir3 \) -prune -ohoặcfind . -path ./misc -prune -o -exec tree -P *.cpp {} \;
harish.venkat

2

Giải pháp thực sự là xuất các đường dẫn đầy đủ, lọc các đường dẫn không mong muốn ra ngoài và cuối cùng là sửa các đầu ra.

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

Nếu tất cả các tệp là cần thiết trong đầu ra, loại bỏ tham số "d".

Giải thích chi tiết có thể được tìm thấy tại: http://qaon.net/press/archives/572 nếu bạn có thể hiểu tiếng Nhật.


-f cờ siêu hữu ích!
Michael Dimmitt
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.