Grrr, комментирование требует 50 респ. Так что этот ответ на самом деле является комментарием к ответу Крис.
Так как спрашивающему, вероятно, не безразличны все каталоги, только худшие, использование сортировки, вероятно, является очень дорогим излишним.
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
Это не так полно, как ваша версия, но то, что это делает, это печатать строки, если они больше, чем предыдущий максимум, значительно уменьшая количество выводимого шума и экономя затраты на сортировку.
Недостатком этого является то, что если у вас есть 2 очень больших директории, а первая имеет на 1 больше инода, чем вторая, вы никогда не увидите 2-ю.
Более полное решение будет состоять в том, чтобы написать более умный Perl-скрипт, который отслеживает 10 лучших значений и выводит их в конце. Но это слишком долго для быстрого ответа о сбое сервера.
Кроме того, некоторые более умные сценарии на Perl позволят вам пропустить цикл while - на большинстве платформ ls сортирует результаты, что также может быть очень дорого для больших каталогов. Сортировка ls здесь не обязательна, так как все, что нас интересует - это количество.