Содержание статьи

Проверка размера файла в bash позволяет быстро определить объём данных в байтах, килобайтах или мегабайтах прямо в терминале без сторонних инструментов. Это полезно при анализе логов, контроле свободного места и автоматизации работы со скриптами.
В системах Linux возможны различия в показателях из-за округлений, распределения блоков и особенностей файловой системы. Поэтому важно выбирать команду с учётом задачи: для скриптов безопаснее использовать только байты, а для оценки структуры каталогов подойдёт человекочитаемый формат.
Использование команды ls для получения размера файла

Команда ls позволяет отобразить размер файла в колонке “Size”. Для более наглядного результата применяют опцию -l, формирующую подробный список: ls -l file.txt. Размер указан в байтах, что удобно для точного контроля.
Просмотр всех файлов в каталоге с сортировкой по размеру выполняется так: ls -lSh. Флаг -S упорядочит список от самых больших файлов к меньшим. Это облегчает поиск крупных элементов, занимающих место на диске.
Определение точного размера байт с помощью stat

stat -c %s filename
«>
Если нужно обработать сразу несколько файлов, можно применить подстановку:
stat -c %s *.log
Для анализа полного набора метаданных доступен расширенный формат:
stat -c «Имя: %n | Размер: %s байт | Права: %A» filename
Таким образом, команда stat помогает избежать неоднозначности, возникающей при использовании инструментов с округлением или автоматическим преобразованием единиц измерения.
Чтение размера через команду du для оценки занимаемого места

Команда du показывает объем данных, занимаемый файлом или каталогом на диске с учетом системного выделения блоков. Это полезно при анализе фактической нагрузки на файловую систему.
Основные варианты использования du:
| Команда | Назначение |
|---|---|
du filename |
Показывает размер в блоках по умолчанию |
du -h filename |
Читаемый формат (K, M, G) |
du -sh folder |
Суммарный размер каталога одной строкой |
Для быстрого определения занимаемого файлами пространства в директории удобно использовать:
du -sh *
Если требуется отсортировать файлы по нагрузке на диск:
du -sh * | sort -h
du -b * | awk '{printf "%-30s %10d байт\n", $2, $1}'
Если требуется отображать только конкретные форматы, используйте шаблон маски:
du -b *.log | awk '{printf "%-25s %12d\n", $2, $1}'
«>
Для сортировки по размеру применяйте sort -n:
du -b * | sort -n | awk '{printf "%-30s %10d байт\n", $2, $1}'
Скрипт можно запускать в любом каталоге, включая сетевые ресурсы и временные директории, чтобы быстро получить статистику по занимаемому месту.
Работа с размером файла внутри скрипта и сохранение в переменную

Внутри сценария Bash размер файла удобно сохранять в переменную для дальнейшей обработки. Команда stat позволяет получить точное число байт, что полезно при проверке ограничений или логировании.
Пример получения размера файла:
size=$(stat -c%s "/path/file.txt")
После выполнения в переменной size будет числовое значение. Его можно использовать в условиях, например, для предотвращения превышения заданного порога:
будет числовое значение. Его можно использовать в условиях, например, для предотвращения превышения заданного порога:»>
if [[ $size -gt 1048576 ]]; then echo "Файл превышает 1 МБ"; fi
Для работы с несколькими файлами создают цикл и вычисляют размер каждого объекта отдельно:
for f in *.log; do s=$(stat -c%s "$f"); echo "$f – $s байт"; done
В Bash можно получить размер файла в разных единицах, что удобно для анализа и отображения информации. Основной подход заключается в использовании команд stat или du с дополнительными параметрами.
- Байты: точный размер файла. Команда
stat -c %s filenameвозвращает размер в байтах. Пример:
size=$(stat -c %s myfile.txt)
echo "Размер: $size байт"
-k у du, чтобы получить размер в КБ. Пример:size_kb=$(du -k myfile.txt | cut -f1)
echo "Размер: $size_kb КБ"
size_mb=$(du -m myfile.txt | cut -f1)
echo "Размер: $size_mb МБ"
-h для «читаемого человеком» формата или вычисление через деление. Пример с делением:size_bytes=$(stat -c %s myfile.txt)
size_gb=$(echo "scale=2; $size_bytes/1024/1024/1024" | bc)
echo "Размер: $size_gb ГБ"
Для массовой обработки нескольких файлов удобно использовать цикл for с вычислением и форматированием каждого размера в нужной единице.
for file in *.log; do
size=$(stat -c %s "$file")
size_mb=$(echo "scale=2; $size/1024/1024" | bc)
echo "$file – $size_mb МБ"
done
Вопрос-ответ:
Как узнать размер одного файла с помощью команды ls?
Команда ls -l выводит подробную информацию о файле, включая размер в байтах. Например, ls -l filename.txt покажет строку с правами, владельцем, размером и датой изменения. Размер файла будет указан в пятом столбце. Для удобства чтения можно использовать ls -lh, чтобы размер отображался в КБ, МБ или ГБ.
Можно ли получить размер файла внутри bash-скрипта и использовать его в переменной?
Да, это делается с помощью командной подстановки. Например: filesize=$(stat -c%s "filename.txt"). После выполнения переменная filesize будет содержать размер файла в байтах, и его можно использовать для проверок, условий или вывода в скрипте.
В чем разница между использованием команд stat и du для определения размера файла?
Команда stat показывает точный размер файла в байтах, независимо от того, сколько места он занимает на диске. Команда du оценивает количество занимаемых блоков на файловой системе, что может отличаться от фактического размера из-за выравнивания блоков. Для точного размера используйте stat, для оценки занимаемого диска — du.
Можно ли вывести размер файла сразу в удобном формате КБ, МБ, ГБ через bash?
Да, для этого используется опция -h в командах ls и du. Например, du -h filename.txt покажет размер в человеко-читаемом виде. В bash-скриптах можно сделать вычисления, разделяя байты на 1024 и выводя с суффиксами КБ, МБ или ГБ, если требуется более точная настройка формата.
Какая команда в bash позволяет узнать точный размер файла в байтах?
Для получения точного размера файла в байтах можно использовать команду stat с ключом -c %s. Например, stat -c %s filename.txt выведет число байт, занимаемых файлом filename.txt. Этот способ удобен, когда нужно использовать размер файла в скриптах или вычислениях, так как результат представлен как простое число без дополнительных символов.
Как получить размер нескольких файлов и отобразить их в читаемой таблице через bash?
Можно использовать комбинацию команд ls -lh или du -h для нескольких файлов. Например, ls -lh file1.txt file2.txt выведет список с указанием размера в человекочитаемом виде (КБ, МБ), дате изменения и имени файла. Если требуется только размер и имя, можно использовать for f in file1.txt file2.txt; do echo "$(stat -c %s $f) $f"; done. Это позволяет сформировать простую таблицу с точным размером в байтах для каждого файла.
