Назад | Перейти на главную страницу

Как правильно отображать использование папки в мегабайтах

я использую du -bs для подсчета размера папки.

du -bs /folder

Результат 96342835 в байтах ... так в МБ (/ 1024/1024) 91,87 МБ.

Хорошо, но когда я использую

du -hs /folder

Результат другой. 99 МБ Или

 du -s taxikondrat.cz/

100980 Кбайт = 98,61 МБ

Пробовал разные методы. В каждом я получал разные результаты. Например.

find -type f -print0 | xargs -0 stat --print='%s\n' | awk '{total+=$1} END {print total}'

Получилось 96059200 байт, поэтому 91,60 МБ

ls -ARgo "$@" | awk '{q += $3} END {print q}'

96338739 байт, поэтому 91,87 МБ. После округления то же самое, но в байтах немного другое.

Вишенка на торте - Google :)

Итак, что правда? Почему такие различия и какой метод наиболее точного подсчета?

Вы сравниваете яблоки и апельсины.

Обратите внимание, что ls -s даст размер файла, основанный на длине фактических данных в файле.

По умолчанию du команда предоставит размер на основе использование диска. Поскольку дисковое пространство распределяется блоками, а длина файлов почти никогда не бывает целыми кратными размеру блока, вы получаете блок, который только частично заполнен данными, но не может использоваться другим файлом.
Другими словами, если ваша файловая система имеет размер блока 512 байт, файл длиной 1 байт займет на диске 512 байт, как и файл размером 511 байт. Файл размером 513 байт займет 2 блока и 1024 байта на диске.

Общая сумма du file использование диска почти всегда будет больше, чем сумма ls -s file размеры файлов, особенно если у вас много (маленьких) файлов и / или очень большие размеры блоков.

Используя du -b переключатель НЕ будет считать блоки, но будет вести себя как ls -s:

-b эквивалентно --apparent-size --block-size=1
--apparent-size
печатать видимые размеры, а не использование диска; хотя видимый размер обычно меньше, он может быть больше из-за дыр в («разреженных») файлах, внутренней фрагментации, косвенных блоков и т. д. -h, --human-readable
размеры печати в удобочитаемом формате (например, 1K 234M 2G)

du -sh преобразует общее количество блоков в удобочитаемый формат,
du -bh напечатает сумму видимых размеров в удобочитаемом формате.

В моем Maildir много маленьких файлов, которые немного отличаются:

$ du -bs cur/
84088436    cur/
$ du -s cur/
91800   cur/
$ du -sh cur/
90M cur/
$ du -bh cur/
81M cur/

РЕДАКТИРОВАТЬ Что касается преобразования в удобочитаемый формат и мегабайты, пожалуйста, не упускайте из виду все "полемика" удобочитаемых в системе десятичных префиксов в сравнении с кратными двоичными, степенью 1000 и степенью 1024.

См. Фон на этой странице: https://www.gnu.org/software/coreutils/manual/html_node/Block-size.html о том, как утилиты GNU, такие как ls и du показать их.

Столица M в du -h вывод составляет 1 048 576 байт.