Jika Anda ingin melakukannya menggunakan alat standar, pipeline berikut akan berfungsi:
find . -type d | perl -lne 'print tr:/::, " $_"' | sort -n | cut -d' ' -f2
Yaitu,
- temukan dan cetak semua direktori di sini secara mendalam terlebih dahulu
- hitung jumlah garis miring di setiap direktori dan tambahkan ke jalur
- urutkan berdasarkan kedalaman (mis., jumlah garis miring)
- ekstrak jalurnya saja.
Untuk membatasi kedalaman yang ditemukan, tambahkan argumen -maxdepth ke perintah find.
Jika Anda ingin direktori terdaftar dalam urutan yang sama yang menemukan keluarannya, gunakan "sort -n -s" alih-alih "sort -n"; flag "-s" menstabilkan pengurutan (yaitu, mempertahankan urutan masukan di antara item yang membandingkan secara setara).
find
perintah mendukung -printf
opsi yang mengenali banyak placeholder.
Salah satu placeholder tersebut adalah %d
yang merender kedalaman jalur yang diberikan, relatif terhadap tempat find
dimulai.
Oleh karena itu, Anda dapat menggunakan satu kalimat sederhana berikut:
find -type d -printf '%d\t%P\n' | sort -r -nk1 | cut -f2-
Ini cukup mudah, dan tidak bergantung pada perkakas berat seperti perl
.
Cara kerjanya:
- secara internal menghasilkan daftar file, masing-masing dirender sebagai baris dua bidang
- kolom pertama berisi kedalaman, yang digunakan untuk (membalikkan) pengurutan numerik, lalu dipotong
- hasilnya adalah daftar file sederhana, satu file per baris, dalam urutan terdalam-pertama