Câu trả lời:
Không có gì tích hợp để tìm, ngay cả GNU cũng tìm thấy. Bạn có thể xử lý hậu kỳ đầu ra find
để sắp xếp theo số lượng dấu gạch chéo, ví dụ như với Perl:
find ... | perl -e 'print sort {$a=~s!/!/! <=> $b=~s!/!/!} <>'
<>
là danh sách của tất cả các dòng đầu vào;$a =~ s!/!/!g
là số lượng dấu gạch chéo $a
, mà chúng tôi sử dụng làm tiêu chí sắp xếp.Nếu bạn có thể sử dụng zsh:
echo **/*(oe\''REPLY=${REPLY//[^\/]}'\')
**/*
liệt kê tất cả các tệp trong thư mục hiện tại và thư mục con.oe
kiểm soát thứ tự trả về các trận đấu: chúng được sắp xếp theo giá trị REPLY
sau khi chạy mã ở đây trong dấu ngoặc kép cho mỗi trận đấu REPLY
được đặt ban đầu thành đường dẫn khớp.$REPLY
để xóa tất cả mọi thứ trừ dấu gạch chéo. Vì vậy, kết quả bao gồm mọi thứ ở độ sâu 1 (kết quả trống $REPLY
), sau đó mọi thứ ở độ sâu 2 ( $REPLY
kết thúc là /
), độ sâu 3 ( //
), v.v.Không
Đi đến câu hỏi này trên SO cho cách giải quyết.
Cảm giác của tôi là bạn có thể. Nó liên quan đến grep và như vậy và một vòng lặp, nhưng tôi thấy nó hoạt động rất tốt, đặc biệt cho trường hợp của bạn về việc tìm kiếm không cần phải hoàn thành.
Nó đòi hỏi nhiều tài nguyên hơn vì:
Điều này là tốt bởi vì:
#! / bin / bash độ sâu = 0 trong khi tìm -mindepth $ sâu -maxdepth $ sâu | grep '.' làm độ sâu = $ ((độ sâu + 1)) làm xong
Bạn cũng có thể dễ dàng đặt nó vào một dòng một cách dễ dàng (?):
depth=0; while find -mindepth $depth -maxdepth $depth | grep --color=never '.'; do depth=$((depth + 1)); done
Nhưng tôi thích các tập lệnh nhỏ hơn gõ ...