我用它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 字节。