如何顯示 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 壓縮。運行第三方工具AFSC工具(您可以使用 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”),以及

(二)未壓縮的總物理大小(磁碟使用)包含 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,這與 sleep 配合效果更好:

% 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 與 ~ 中的行為不同。

相關內容