如何在 Mac OSX 上确定文件的扩展属性和资源分支及其大小?

Gag*_*ngh 5 python macos file-forks

我编写了一个小实用程序,用于为任何文件夹结构创建 xml,并通过生成的 xml 来比较文件夹,该 xml 支持 win 和 Mac 作为平台。但是在 Mac 上,递归计算文件夹大小不会加起来总大小。经过调查,发现这是由于某些文件上存在扩展属性资源分支

任何人都可以知道我如何最好在 python 中确定这些扩展属性和资源分支及其大小。目前,我正在使用os.path.getsize来确定文件的大小并添加文件大小来最终确定文件夹的大小。

Die*_*Epp 3

stat您想要名为 的结果的隐藏成员st_blocks

>>> s = os.stat('some_file')
>>> s
posix.stat_result(st_mode=33261, st_ino=12583347, st_dev=234881026,
                  st_nlink=1, st_uid=1000, st_gid=20, st_size=9889973,
                  st_atime=1301371810, st_mtime=847731600, st_ctime=1301371422)
>>> s.st_size / 1e6 # size of data fork only, in MB
9.889973
>>> x.st_blocks * 512e-6 # total size on disk, in MB
20.758528
Run Code Online (Sandbox Code Playgroud)

相关文件在资源分支中大约有 10 MB,它显示在结果中,stat但以“隐藏”属性显示。(对于那些确切知道这是什么文件的人来说是加分的。)请注意,记录中该man 2 stat属性st_blocks始终测量 512 字节的增量。

注意: st_size测量数据的字节数,但st_blocks测量磁盘上的大小,包括部分使用的块的开销。所以,

>>> open('file.txt', 'w').write('Hello, world!')
13
>>> s = os.stat('file.txt')
>>> s.st_size
13
>>> s.st_blocks * 512
4096
Run Code Online (Sandbox Code Playgroud)

现在,如果您在 Finder 中执行“获取信息”,您将看到该文件具有:

大小:磁盘上 4 KB(13 字节)