我正在写极客工具 3脚本显示特定 VMware Fusion 虚拟机的大小。此类.vmwarevm
“文件”实际上是一个打包的目录。
获取信息Finder 显示文件大小为“52.91 GB”。我运行以下du
命令来获取文件大小:
> du -hs ~/Documents/Virtual\ Machines.localized/MY-PRECIOUS-7.vmwarevm | awk '{print $1}'
此du -hs
命令返回文件大小为“49G”。这与 Finder 报告的差异是什么原因造成的?
或者,我尝试-s
用-d
如下选项替换该选项:
du -hd ~/Documents/Virtual\ Machines.localized/MY-PRECIOUS-7.vmwarevm | awk '{print $1}'
此命令返回文件大小为“59G”。Finder 、和du -hd
之间的差异是什么?du -hd
du -hs
此外,此du -hd
命令在 geektool 3 中没有产生任何输出。为什么?
答案1
虽然我不是 Mac OS X 用户,但是我从某处读到 Finder 现在使用十进制。
区别在于 du 仍然使用 2 进制吗?
49.0 GiB * (1024^3 bytes / GB) = 52,613,349,376 bytes = 52.6 GB
(细微的差别是因为du
四舍五入到最接近的 GB)
答案2
还请注意,“du”返回的是实际使用的磁盘空间,而其他工具将返回已分配的空间。如果您有稀疏文件,这两个值可能会有很大差异 - 我有一个文件分配了 2 TB 的空间,但它只占用了大约 200 MB 的磁盘空间。
答案3
Nifle 是正确的。 du
返回以 2 为基数,Finder 返回以 10 为基数,49GiB ≈ 52.91GB
-d 参数要求您指定深度。从刚才的实验来看,如果您为深度提供除数字之外的其他内容,它会吃掉您指定的参数,并且表现得像您这样做了一样-d 0
。您获得的 59G 是当前目录的大小,而不是 vmwarevm 文件的大小。
以下是我进行的实验:
[~]$ ls -d Code
Code/
[~]$ du -h -s Code
8.3M Code
[~]$ du -h -d 0 Code
8.3M Code
[~]$ du -h -d Code
38G . <-- this is the size of ~/
[~]$ du -h -d 0
38G .
你可能想读Mac OS X du(1) 手册页了解更多信息。