Grrr, berkomentar membutuhkan 50 rep. Jadi jawaban ini sebenarnya adalah komentar atas jawaban chris.
Karena si penanya mungkin tidak peduli dengan semua direktori, hanya yang terburuk, maka menggunakan sortir kemungkinan besar sangat mahal.
find . -type d |
while
read line
do
echo "$(ls "$line" | wc -l) $line"
done |
perl -a -ne'next unless $F[0]>=$max; print; $max=$F[0]' | less
Ini tidak selengkap versi Anda, tetapi yang dilakukan adalah mencetak baris jika lebih besar dari maksimum sebelumnya, sangat mengurangi jumlah kebisingan yang tercetak, dan menghemat biaya semacam itu.
Kelemahan dari ini adalah jika Anda memiliki 2 direktori yang sangat besar, dan yang pertama memiliki 1 lebih banyak inode daripada yang ke-2, Anda tidak akan pernah melihat yang ke-2.
Solusi yang lebih lengkap adalah dengan menulis skrip perl yang lebih cerdas yang melacak 10 nilai teratas yang terlihat, dan mencetaknya di akhir. Tapi itu terlalu lama untuk jawaban serverfault yang cepat.
Juga, beberapa skrip perl yang lebih pintar akan membuat Anda melewatkan loop while - pada sebagian besar platform, seperti hasil, dan itu juga bisa sangat mahal untuk direktori besar. Jenis ini tidak diperlukan di sini, karena yang kita pedulikan hanyalah hitungan.