Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/47: Рейтинг темы: голосов - 47, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 11.12.2016
Сообщений: 18

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

18.03.2019, 21:19. Показов 9520. Ответов 1

Студворк — интернет-сервис помощи студентам
Написать скрипт, считающий для заданного каталога и всех его подкаталогов суммарный размер и количество файлов в заданном диапазоне размеров файлов (имя каталога задаётся пользователем в качестве аргумента командной строки, 2,3 аргументы командной строки диапазон размеров). Результаты выводятся на консоль в виде полный путь, количество файлов, суммарный размер.
Огромная благодарность за помощь!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.03.2019, 21:19
Ответы с готовыми решениями:

Вывести суммарный размер в байтах файлов каталога
Написать командный сценарий для интерпретатора bash, который выводил бы суммарный размер в байтах файлов каталога, указанного в...

Как в PS1 выводить количество файлов и подкаталогов домашнего каталога?
В задаче требуется изменить конфигурационный файл командного интерпретатора, чтобы формировалась динамически изменяющаяся и наследуемая в...

Удаления файлов с каталога ( и подкаталогов) если размер больше 5 Гб
Добрый день. Перепробовал на форуме все скрипты, но не работаю так как надо. Задачка простая : Есть каталог F:\rezerv с...

1
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
19.03.2019, 10:54
Лучший ответ Сообщение было отмечено Vollan как решение

Решение

Раз нужно написать скрипт, значит создадим файл с именем например test.sh
Напишем вверху особую строчку называющуюся Sha-bang! вызывающую интерпретатор bash
#!/bin/bash
Нам нужна тулза способная искать рекурсивно файлы определенного размера и выводить путь к ним плюс сам размер
Второе. Нам необходимо будет посчитать их количество и сложить их размер.
С первой задачей может справиться утилита find. Чтобы посмотреть нужные опции введите в терминале
LESS=+/"-size" man find
Можете воспользоваться этой частью man страницы для вывода справки по использованию размеров диапазона.
Давайте напишем образец. Так как нужен в выводе полный путь к файлам, а заданный в параметре путь может быть
как полным так и относительным, применим конструкцию $(cd $1; pwd) приобразующую любой корректный путь в полный.
Пока наш скрипт не рабочий просто подставляем в начало строки команду echo которую обязуемся в дальнейшем убрать
echo find $(cd $1; pwd)
Добавим нашему файлу права на выполнение
chmod 755 test.sh
И запустим получившийся скрипт
Bash
1
2
./test.sh /path/to/dir
>find /path/to/dir
Заработала машинка. Интересно? Дальше еще будет круче
Добавим например маску имени файла
echo find $(cd $1; pwd) -name "*.txt"
Или лучше укажем например тип простого файла, ну чтобы отсеить каталоги и ссылки
echo find $(cd $1; pwd) -type f
Теперь напишем фильтр по которому команда find будет отбирать файлы нужного нам размера
Определимся сразу, чтобы не переусложнять скрипт, что все размеры файлов у нас будут в байтах
echo find $(cd $1; pwd) -type f -size +"$2"c -a -size -"$3"c
Кстати тут кроется небольшая тонкость. В указанный диапазон не попадают файлы совпадающие
с самими заданными границами размеров. Тоесть по условию +size > file < -size.
Если есть необходимость чтобы размеры отобраных файлов включали и границы заданого диапазона,
необходимо начальный размер уменьшить на еденицу а замыкающий размер соответственно увеличить на
единицу.
Готово. Теперь нам понадобится отформатировать вывод. Посмотрим внимательно в инструментарий команды find
LESS=+/"-printf format" man find
Есть подходящие квантификаторы к опции -fprintf
Выведем каждый найденный файл в одной строке с параметрами разделенными
пробелом. В первом параметре определим полный путь к файлу, а во втором его размер в байтах.
find $(cd $1; pwd) -type f -size +$2 -a -size -$3 -printf "%p %s\n"
Вот теперь можно убрать команду echo и сделать пробный заезд
Bash
1
./test.sh path/to/dir 200 2000
На выходе я получила стопку файлов совпадающих с заданными параметрами и их размер.
Переходим ко второй части задания, подсчета файлов и общего тоннажа стопки
Я не буду ломать себе голову и воспользуюсь инструментом awk который с подобной работой справляется на раз
Перенаправим вывод команды find на вход утилиты awk через конвеер
Bash
1
2
3
#!/bin/bash
find $(cd $1; pwd) -type f -size +"$2"c -a -size -"$3"c -printf "%p %s\n" |
        awk '{print $1; size+=$2; count++} END {printf "Количество файлов: %d\nОбщий размер: %d\n", count, size}'
На этом все, спасибо за внимание, может кому мой разбор будет полезен.
Добавлю только что необходимо включить в скрипт проверку на корректность вводимых данных.

Добавлено через 17 минут
У меня возникло сомнение что необходимо выводить так:
Полный путь К КАТАЛОГУ
Число найденных файлов в этом каталоге
Общий размер файлов в этом каталоге
Тогда программа срочно принимает вид
Bash
1
2
3
4
#!/bin/bash
find $(cd $1; pwd) -type f -size +"$2"c -a -size -"$3"c -printf "%h %s\n" |
awk '{d[$1] += $2; k[$1]++}
    END {for (i in d) printf "%s\nКоличество файлов: %d\nОбщий размер: %d\n", i, k[i], d[i]}'
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.03.2019, 10:54
Помогаю со студенческими работами здесь

NTFS, вывести суммарный размер файлов в заданном каталоге
Помогите реализовать пример Вывести суммарный размер файлов в заданном каталоге

Перенос файлов из каталога и всех его подкаталогов в одну папку
Добрый вечер! Очень нужна помощь в создании BAT-файла. Необходимо переносить все файлы по определенной маске из каталога и всех его...

Подсчитать количество подкаталогов и файлов
Подсчитать количество подкаталогов и файлов. вот мой вариат: @echo off for /D %%i in (%1\*.*) do set /A i+=1 echo The total...

В заданном каталоге и его подкаталогах найти общее количество подкаталогов
Код КФ получился такой: @echo off for /D %%i in (%1\*.*) do set /A i+=1 echo The total number of subdirectories is %i% ...

В заданном каталоге и его подкаталогах найти общее количество подкаталогов. На экран вывести только требуемый результат. Использовать цикл FOR /D
Нашел, скопировал в файл, а как подсчитать и вывести количество???? @echo off cls FOR /r e:\flash %%f IN (.) DO ECHO...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru