Intereting Posts
Конвертировать данные из файла LDIF в CSV Что такое настройка «mintsystem» и когда я хочу ее активировать? Какой самый быстрый способ получить n-ю строку текстового файла удалить геогель из debian Применение функции bash для каждого файла в подпапке рекурсивно Как я могу ограничить содержимое каталогов по типу файла? Удалить пользователя ldap Установка проблемы Zeppelin: как исправить зависимости без Интернета? Безопасная обработка PDF-файлов и других форматов электронных книг в Linux Не удается запустить команды udisks в сценариях udev Java-код для копирования файлов с одной Linux-машины на другую Linux-машину Моя система не загружается Имя пользователя отображается как «bash-3.0» в оболочке SSH Правильно проанализировать аргументы в скрипте, которые ведут себя как оболочка, вызываемая через SSH системный администратор проблемы (например, GNS3 для сетей)

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

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

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

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

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

     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 .