Grrr, yorum yapmak 50 tekrar gerektirir. Yani bu cevap aslında chris'in cevabı hakkında bir yorum.
Sorgulayan muhtemelen tüm dizinleri umursamadığı için, sadece en kötü olanları, o zaman sıralama kullanmak muhtemelen çok pahalı bir aşırı doludur.
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
Bu, sürümünüz kadar eksiksiz değildir, ancak bunun bir önceki maksimum değerden daha büyük olması durumunda baskı çizgileri yazdırılması, yazdırılan gürültü miktarını büyük ölçüde azaltması ve sıralama masrafını azaltmasıdır.
Bunun dezavantajı, 2 çok büyük dizininiz varsa ve ilki 2'den 1 inode daha varsa, asla 2'yi göremezsiniz.
Daha eksiksiz bir çözüm, görülen en iyi 10 değeri takip eden ve sonunda çıktısı basan daha akıllı bir perl betiği yazmak olacaktır. Ancak bu hızlı bir sunucu hatası cevabı için çok uzun.
Ayrıca, bazı daha akıllı perl komut dosyaları while döngüsünü atlamanıza izin verir - çoğu platformda, sonuçları sıralar ve bu da büyük dizinler için çok pahalı olabilir. Burada ls sıralama gerekli değildir, çünkü tek umurumuz budur.