Intereting Posts
Как найти, какой последовательный порт используется? Почему CentOS 6 настраивает ширину консоли при запуске экрана? Как создать ярлыки клавиш для яркости экрана в Xubuntu (XFCE Ubuntu)? Измените утилиту диска gnome для использования двоичных единиц Места в Bash, где сопоставление образцов выполняется с помощью регулярных выражений? bash для чтения первого аргумента в качестве входного файла и поиска переменной в другом файле по строкам Как выровнять апплеты на панели Gnome См. Прогресс в файлах (Nautilus) Требуется установка DVD-диска Debian 6 Удаление gedit без удаления всего окружения cinnamon-desktop-environment обработка сигналов в ядре unix Сценарий запуска systemd после того, как GUI готов? Сценарий для удаления пробелов и строчных букв в именах файлов Различные стили перенаправления с netcat и tee дают разные результаты Sed / Awk – найти строку длиной ровно n символов

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

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

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

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

Сначала вы можете найти каталоги верхнего уровня, затем использовать вторую находку, чтобы подсчитать количество файлов и каталогов в каталоге 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