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.6MB, 크기가 거의 두 배입니다.

이유는 분명합니다. Apple은 TextEdit에서 HFS 압축을 사용했습니다. 타사 도구 실행afsctool(Homebrew로 설치할 수 있음)은 다음과 같은 결과를 생성합니다.

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

이제 macOS는 Finder 정보 창의 디스크 크기 값에서 알 수 있듯이 압축되지 않은 물리적 크기를 분명히 알고 있는 것 같습니다.

내 질문은 해당 정보를 가져오는 명령줄 읽기 전용 방법, 즉 다음을 표시하는 방법이 있는지입니다.

(a)압축되지 않은 물리적 크기(디스크 사용) HFS 압축된 파일, 즉 /usr/bin/stat -f %f"32"를 반환하는 파일(TextEdit에서는 어떤 이유로 "524320"임에도 불구하고) 및

(b)압축되지 않은 총 물리적 크기(디스크 사용) HFS 압축 파일이 포함된 디렉토리 또는 번들.

메모:크기를 계산하려면 macOS 기본 명령만 사용해야 합니다.~ 아니다일부 사용자가 Spotlight를 완전히 비활성화했다는 사실을 제외하면 mdls버그가 있고 때로는 키 (null)에 대해 반환하는 명령 등의 Spotlight 종속 데이터를 사용합니다 .kMDItemPhysicalSize

답변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

음, afsctoolmacOS에서 제거되었으며 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와 ~에서는 다르게 작동합니다.

관련 정보