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

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

Я бы хотел увидеть:

  • Количество каталогов
  • Количество подкаталогов
  • количество файлов
  • кумулятивный размер

One Solution collect form web for “Список каталогов, включая подкаталоги, с количеством файлов и суммарным размером”

Если я правильно вас пойму, это даст вам желание, которого вы хотите:

 find /path/to/target -type d | while IFS= read -r dir; do echo -ne "$dir\tsize: $(du -sh "$dir" | cut -f 1)" echo -ne "\tsubdirs: $(find "$dir" -mindepth 1 -type d | wc -l)" echo -e "\tfiles: $(find "$dir" -type f | wc -l )"; done | tac 

Например, если вы запустили это в /boot , вы получите следующий вывод:

 /boot/burg/themes/sora_extended size: 8.0K subdirs: 0 files: 1 /boot/burg/themes/radiance/images size: 196K subdirs: 0 files: 48 /boot/burg/themes/radiance size: 772K subdirs: 1 files: 53 /boot/burg/themes/winter size: 808K subdirs: 0 files: 35 /boot/burg/themes/icons size: 712K subdirs: 0 files: 76 /boot/burg/themes size: 8.9M subdirs: 26 files: 440 /boot/burg/fonts size: 7.1M subdirs: 0 files: 74 /boot/burg size: 20M subdirs: 29 files: 733 /boot/grub/locale size: 652K subdirs: 0 files: 17 /boot/grub size: 4.6M subdirs: 1 files: 224 /boot/extlinux/themes/debian-wheezy/extlinux size: 732K subdirs: 0 files: 11 /boot/extlinux/themes/debian-wheezy size: 1.5M subdirs: 1 files: 22 /boot/extlinux/themes size: 1.5M subdirs: 2 files: 22 /boot/extlinux size: 1.6M subdirs: 3 files: 28 /boot/ size: 122M subdirs: 36 files: 1004 

Чтобы иметь легкий доступ к этой команде, вы можете превратить ее в функцию. Добавьте эти строки в файл инициализации вашей оболочки ( ~/.bashrc для bash):

 dirsize(){ find "$1" -type d | while IFS= read -r dir; do echo -ne "$dir\tsize: $(du -sh "$dir"| cut -f 1)" echo -ne "\tsubdirs: $(find "$dir" -mindepth 1 -type d | wc -l)" echo -e "\tfiles: $(find "$dir" -maxdepth 1 -type f | wc -l )"; done | tac } 

Теперь вы можете запустить его как dirsize /path/ .


объяснение

Вышеуказанная функция имеет 5 основных частей:

  1. find /path/to/target -type d | while IFS= read -r dir; do ... ; done find /path/to/target -type d | while IFS= read -r dir; do ... ; done : это найдет все каталоги в /path/to/target и обработает каждый из них, установив переменную dir на свое имя. IFS= гарантирует, что это не сломается в каталогах с пробелами в их именах.

  2. echo -ne "$dir\tsize: $(du -sh "$dir" | cut -f 1)" : используется команда du для получения размера каталога и cut для печати только первого поля du .

  3. echo -ne "\tsubdirs: $(find "$dir" -mindepth 1 -type d | wc -l)" : Эта команда find ищет подкаталоги $dir . type -d гарантирует, что мы будем находить только директории, файлы и -mindepth чтобы мы не подсчитывали текущий каталог . ,

  4. echo -e "\tfiles: $(find "$dir" -maxdepth 1 -type f | wc -l)"; : Этот файл ищет файлы ( -type f ), которые непосредственно ( -maxdepth 1 ) -maxdepth 1 под $dir . Он не будет считать файлы, находящиеся в подкаталогах $d .

  5. | tac | tac : Наконец, все это проходит через tac который просто меняет порядок, в котором печатаются строки. Это означает, что общий размер целевого каталога будет отображаться как последняя строка. Если это не то, что вы хотите, просто удалите | tac | tac .

  • Что означают символы, обозначенные ls -F?
  • Bash для замены двух шагов: cd ./some_dir, ls -al?
  • Есть ли способ показать разрешения для файла без использования `ls`
  • Список каталогов, но только если он содержит подкаталоги?
  • Как вы можете группировать символические ссылки с каталогами в выводе `ls`, но сказать разницу?
  • Команда ls без (скрытия) даты и времени
  • Список недавно измененных файлов
  • Как сначала просмотреть файлы и каталоги с каталогами
  • Самый дешевый способ найти самый старый файл (рекурсивно) из каталога с большой нагрузкой
  • ls -l vs ls -lL
  • Как искать и заменять текст во всех php-файлах в каталоге и в его подкаталогах
  • Linux и Unix - лучшая ОС в мире.