du 如何计算人类可读的大小?

du 如何计算人类可读的大小?

这是一个使用实际数据的具体示例。如果我du按如下所示运行/path/to/some/dir,我会得到:

% du -s --bytes /path/to/some/dir
4218593783204   /path/to/some/dir

我想以“人类可读”单位获得该大小,例如 KB、MB、GB 等,其中

1 KB = 2 ** 10 B
1 MB = 2 ** 20 B
1 GB = 2 ** 30 B
1 TB = 2 ** 40 B
1 PB = 2 ** 50 B
1 EB = 2 ** 60 B

在此示例中,所需的人类可读单位为 1 TB,因此,根据上述约定,原始 4218593783204 字节转换为

% printf -- "%f TB\n" $(( 4218593783204.0 / 2 ** 40 ))
3.836789 TB

所以我正在寻找du类似的输出3.8T。到目前为止,一切都很好。

问题是我无法想出在调用时du会报告接近 3.8T 的人类可读大小。相反,我得到这个:

% du -sh /path/to/some/dir
5.3T    /path/to/some/dir
% du -s --si /path/to/some/dir
5.8T    /path/to/some/dir
% du -s --block-size=$(( 2 ** 40 )) /path/to/some/dir
6   /path/to/some/dir

(请注意,上面最后一次绝望的尝试,使用--block-size, 是非常不够的,即使它有效,因为它要求我提前知道我想要 KB、MB、GB 等中的哪一个。)

我对这些结果感到困惑。该手册的内容du如下:

       -h, --human-readable
              print sizes in human readable format (e.g., 1K 234M 2G)

       --si   like -h, but use powers of 1000 not 1024

...这根本不能帮助我理解发生了什么。

问:有人可以向我解释一下du上面最后三个命令如何得出数字 5.3T、5.8T 和 6 吗?

相关内容