这是一个使用实际数据的具体示例。如果我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 吗?