Jawaban:
Tidak ada yang built-in untuk ditemukan, bahkan GNU menemukan. Anda dapat memposting proses finduntuk mengurutkan berdasarkan jumlah garis miring, misalnya dengan Perl:
find ... | perl -e 'print sort {$a=~s!/!/! <=> $b=~s!/!/!} <>'
<> adalah daftar semua jalur input;$a =~ s!/!/!gadalah jumlah garis miring $a, yang kami gunakan sebagai kriteria sortir.Jika Anda dapat menggunakan zsh:
echo **/*(oe\''REPLY=${REPLY//[^\/]}'\')
**/* daftar semua file dalam direktori dan subdirektori saat ini.oemengontrol urutan pengembalian pertandingan: mereka diurutkan berdasarkan nilai REPLYsetelah menjalankan kode di sini dalam tanda kutip untuk setiap pertandingan dengan REPLYawalnya diatur ke jalur yang cocok.$REPLYuntuk menghapus semuanya kecuali garis miring. Jadi hasilnya terdiri dari semua pada kedalaman 1 (hasil kosong $REPLY), lalu semuanya pada kedalaman 2 ( $REPLYberakhir menjadi /), kedalaman 3 ( //), dll.Nggak
Buka pertanyaan ini di SO untuk pemecahan masalah.
Perasaan saya adalah bahwa Anda bisa. Ini melibatkan grep dan ini dan sebuah loop, tetapi saya menemukan itu bekerja dengan sangat baik, khusus untuk kasus Anda tentang menemukan tidak perlu diselesaikan.
Ini lebih intensif sumber daya karena:
Ini bagus karena:
#! / bin / bash
kedalaman = 0
sambil menemukan -mindepth $ depth -maxdepth $ depth | grep '.'
melakukan
depth = $ ((depth + 1))
selesai
Anda juga dapat memasangnya dalam satu baris dengan cukup (?) Dengan mudah:
depth=0; while find -mindepth $depth -maxdepth $depth | grep --color=never '.'; do depth=$((depth + 1)); done
Tapi saya lebih suka skrip kecil daripada mengetik ...