如何显示 HFS 压缩文件或目录的未压缩总物理大小(以字节为单位)?

如何显示 HFS 压缩文件或目录的未压缩总物理大小(以字节为单位)?

例如:Apple 的 TextEdit/Applications/TextEdit.app

如果你用它计算物理尺寸,echo "$(/usr/bin/du -k -d 0 /Applications/TextEdit.app | /usr/bin/awk '{print $1}') * 1024" | /usr/bin/bc -l你会得到(在我的例子中是 10.11.6)的尺寸4538368 字节

但是,如果你在 Finder 中打开信息窗口,它会告诉你物理尺寸要大得多:磁盘空间 8.6 MB,尺寸几乎增加了一倍。

原因很明显:Apple 在 TextEdit 上使用了 HFS 压缩。运行第三方工具工具(你可以用 Homebrew 安装)产生以下结果:

/usr/local/bin/afsctool /Applications/TextEdit.app /Applications/TextEdit.app: Number of HFS+ compressed files: 693

现在,macOS 显然知道未压缩的物理大小,Finder 的信息窗口中的磁盘大小值就是证据。

我的问题是,是否有一种命令行只读的方式来获取该信息,即显示以下方法:

(一)未压缩的物理尺寸(磁盘使用)HFS 压缩文件,即/usr/bin/stat -f %f返回“32”的文件(尽管在 TextEdit 中由于某种原因返回“524320”),以及

(b)未压缩的总物理大小(磁盘使用)包含 HFS 压缩文件的目录或包。

笔记:只能使用 macOS 原生命令来计算大小,而不是使用依赖于 Spotlight 的数据,例如来自mdls命令的数据,该命令存在缺陷,有时会返回(null)密钥kMDItemPhysicalSize,此外有些用户已经完全禁用了 Spotlight。

答案1

使用afsctool带标志的命令-v,例如:

$ afsctool -v README
README:
File is HFS+ compressed.
File size (uncompressed data fork; reported size by Mac OS 10.6+ Finder): 3046 bytes / 3 KB (kilobytes) / 3 KiB (kibibytes)
File size (compressed data fork - decmpfs xattr; reported size by Mac OS 10.0-10.5 Finder): 0 bytes / 0 KB (kilobytes) / 0 KiB (kibibytes)
File size (compressed data fork): 1427 bytes / 1 KB (kilobytes) / 1 KiB (kibibytes)
Compression savings: 53.2%
Number of extended attributes: 0
Total size of extended attribute data: 0 bytes
Approximate overhead of extended attributes: 268 bytes
Approximate total file size (compressed data fork + EA + EA overhead + file overhead): 1943 bytes / 2 KB (kilobytes) / 2 KiB (kibibytes)

答案2

嗯,afsctool已从 macOS 中删除,并且du适用于整个目录:

  %  ditto -v --hfsCompression  --arch arm64 /Volumes/Thunderbird/Thunderbird.app \
     /Applications/Thunderbird\ BETA\ V.99.ARM64.app
Copying /Volumes/Thunderbird/Thunderbird.app [arm64]

 %  ditto -v --hfsCompression  /Volumes/Thunderbird/Thunderbird.app
    /Applications/Thunderbird\ BETA\ V.99.UNIVERSAL.app 
Copying /Volumes/Thunderbird/Thunderbird.app 

  % du -sk /Applications/Thunderbird* /Volumes/Thunderbird/Thunderbird.app                                              
352808  /Applications/Thunderbird BETA V.94.Universal.app
74832   /Applications/Thunderbird BETA V.99.ARM64.app
133152  /Applications/Thunderbird BETA V.99.UNIVERSAL.app
349184  /Applications/Thunderbird.app
349184  /Volumes/Thunderbird/Thunderbird.app

 % du -skA /Applications/Thunderbird\ BETA\ V.99.*
207938  /Applications/Thunderbird BETA V.99.ARM64.app
348917  /Applications/Thunderbird BETA V.99.UNIVERSAL.app
 % 

来自文档:

du: -A 显示表观大小而不是磁盘使用情况。这在操作压缩卷或稀疏文件时很有用

(我想知道为什么以及何时 afsctool 从 macOS 中删除,是否可以从旧安装中复制,以及它是否在 Darwin 中。)

哦,至于 mdls,这与睡眠配合使用效果更好:

% cat /dev/urandom | head -c 5 > foo; sleep 3; mdls foo | grep ize
kMDItemFSSize                          = 5
kMDItemLogicalSize                     = 5
kMDItemPhysicalSize                    = 4096

对比

% cat /dev/urandom | head -c 2 > foo; mdls foo | grep ize
kMDItemFSSize              = (null)

此外,输出取决于当前目录;它在 /tmp 和 ~ 中的行为不同。

相关内容