Укажите только количество всех файлов / каталогов для дерева каталогов текущего каталога

Я хочу указать количество каталогов под каждым деревом подкаталогов текущего каталога. Поскольку существует слишком много каталогов, я не могу войти в отдельные каталоги и проверить. Я хотел бы создать отчет, похожий на тот, который показан на следующем рисунке:

введите описание изображения здесь

Проблема в том, что мой сервер предупреждает о максимальном ограничении создания каталогов. Поэтому я хотел знать, какой каталог в родительском каталоге имеет максимальные подкаталоги (исключая файлы),

  • разрешение на соляризацию и предоставление / делегирование прав?
  • Как исключить список полных путей каталога в команде find в Solaris
  • Выполнить команду для входа в общую учетную запись
  • сетевая маска по умолчанию в Solaris
  • Как проверить, какая версия редактора VI у меня есть?
  • Где проверить связанные с ntp журналы на Sun Solaris?
  • Почему cron перестала обрабатывать команды?
  • Solaris 11_3 Установка на LDom через «telnet localhost 5000»
  • 5 Solutions collect form web for “Укажите только количество всех файлов / каталогов для дерева каталогов текущего каталога”

    Сначала вы можете найти каталоги верхнего уровня, затем использовать вторую находку, чтобы подсчитать количество файлов и каталогов в каталоге toplevel:

    $ for dir in $(find . -maxdepth 1 ! -path . -type d | sort); \ do echo -n "$dir " && find $dir ! -path . | wc -l ; done ./adir 1151 ./anotherdir 140 ./623de41e44 280 ./examples 154 ... 

    Будет ли что-то вроде этого удовлетворить ваши потребности:

    Путь /boot используется для демонстрации образцов. Измените его в нужную директорию.

     for DIR in $(find /boot/* -maxdepth 1 -type d) do printf "%40s: %10d\n" "${DIR}" $(find ${DIR}|wc -l) done 

    Вывод:

      /boot/grub: 282 /boot/grub/fonts: 2 /boot/grub/i386-pc: 272 /boot/grub/locale: 4 /boot/lost+found: 1 

    Чистое решение ksh93:

     FIGNORE='@(.|..)' for dir in */; do a=( "$dir"/**/* ); printf "%s\t%s\n" "$dir:" "${#a[*]}"; done 

    Результат из /usr/src :

     linux-3.17.7-gentoo/: 561 linux-3.5.7-gentoo/: 517 linux-3.7.10-gentoo/: 505 linux-3.7.9-gentoo/: 513 linux-3.8.13-gentoo/: 551 linux-4.0.5-gentoo/: 1849 

    пытаться

      find * -print | awk -F/ '{c[$1]++;} END { for (c2 in c) printf "-%s -- %d\n",c2,c[c2] ;} ' 

    где

    • найти из каталога выше тех, которые вы хотите подытожить
    • awk будет считать файл верхнего уровня и файл и суммировать в конце.

    Следующий небольшой цикл отобразит количество всех файлов (кроме символических ссылок) в дочерних каталогах . которые существуют в той же файловой системе, что и дочерний каталог.

     for d in ./* ./.[!.]* ./..?* do ! [ -h "$d" ] && cd "$d" 2>&3 || continue printf "%s:\t" "$d" find .//. -xdev -depth ! -type l | grep -c '^\.//\.' cd .. done 3>/dev/null 
    Linux и Unix - лучшая ОС в мире.