Grrr, komentarz wymaga 50 powtórzeń. Ta odpowiedź jest więc komentarzem do odpowiedzi Chris'a.
Ponieważ pytający prawdopodobnie nie przejmuje się wszystkimi katalogami, tylko najgorszymi, użycie sortowania jest prawdopodobnie bardzo kosztowną przesadą.
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
Nie jest to tak kompletne jak twoja wersja, ale to robi linie wydruku, jeśli są większe niż poprzednie maksimum, znacznie zmniejszając ilość wydrukowanego szumu i oszczędzając koszty tego rodzaju.
Wadą tego jest to, że jeśli masz 2 bardzo duże katalogi, a pierwszy ma o 1 więcej i-węzłów niż drugi, nigdy nie zobaczysz drugiego.
Bardziej kompletnym rozwiązaniem byłoby napisanie mądrzejszego skryptu perlowego, który śledzi 10 najważniejszych wartości i wypisuje je na końcu. Ale to zbyt długo, aby szybko odpowiedzieć na błąd serwera.
Ponadto, nieco bardziej inteligentne skrypty perla pozwoliłyby pominąć pętlę while - na większości platform ls sortuje wyniki, a to może być bardzo kosztowne w przypadku dużych katalogów. Sortowanie ls nie jest tutaj konieczne, ponieważ liczy się tylko liczba.