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

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

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

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

  • Как узнать, как зарегистрировать полное имя скрипта, выполненное пользователем?
  • Как проверить файловую систему UFS на SPARC с Linux?
  • Проблемы с передачей команд другому скрипту через ssh
  • Как увидеть свободное место на диске SunOS?
  • Копирование быстрее, чем cp?
  • Только цифры sh и grep
  • В Solaris 7 Box пытается получить X-библиотеку расширений для работы с использованием x11vnc
  • Есть ли графический интерфейс для службы управления услугами Solaris?
  • 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 - лучшая ОС в мире.