以兆字节为单位显示文件夹使用情况的正确方法是什么

以兆字节为单位显示文件夹使用情况的正确方法是什么

我用它du -bs来计算文件夹大小。

du -bs /folder

结果是96342835以字节为单位...因此以 MB 为单位 (/1024/1024)91,87MB

好的,但是当我使用

du -hs /folder

结果不一样。99MB 或者

 du -s taxikondrat.cz/

100980 千字节 =98,61MB

我尝试了不同的方法。每种方法都得到了不同的结果。例如

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

我得到了 96059200 字节,所以91,60MB

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

96338739 字节,因此91,87 MB。四舍五入后相同,但字节数略有不同。

锦上添花的是谷歌:) 在此处输入图片描述

那么,事实究竟如何?为何会出现这种差异?什么方法才是最准确的计数?

答案1

你在比较苹果和橘子。

请注意,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/

编辑关于转换为人类可读的输出和兆字节,请不要忽视整个“争议'SI 十进制前缀与二进制倍数、1000 的幂与 1024 的幂中人类可读性的变化。

请参阅此页面的背景信息:https://www.gnu.org/software/coreutils/manual/html_node/Block-size.html关于 GNU 实用程序如何ls显示du它们。

M输出中的大写字母du -h代表 1,048,576 字节。

相关内容