如何从命令行创建一个 zip 以保留 macOS 元数据,但在 > 4GB 时也通过验证测试?

问题描述 投票:0回答:0

我正在寻找一种在 macOS 上创建文件和文件夹的 zip 存档的方法,该方法满足以下要求:

  1. 从命令行创建 zip(不是 GUI,例如 Finder 或 Archive Utility)
  2. 妥善保存 macOS 元数据(资源叉、xattrs、acls 等),程度与 Apple 内置的存档实用程序相同,理想情况下以相同的方式(隔离到
    __MACOSX
    子目录)
  3. 生成一个有效的压缩 .zip 文件,即使大于 4GB,该文件也将无误地通过
    unzip -t
    测试。

如果可以使用内置工具完成则加分,但我也对第三方解决方案持开放态度。

许多 previous answers 建议解决方案应该是如下所示的

ditto
命令,这应该是 Archive Utility 本身在幕后使用的内容:

ditto -c -k --sequesterRsrc --keepParent src_directory archive.zip

这在某些时候可能是真的,但我怀疑它不再是 Archive Utility 使用的(从 macOS 13 Ventura 开始),因为,例如:

  • 使用
    ditto
    创建的大(> 4GB)zip 无法通过
    unzip -t
    测试(
    extra bytes at beginning or within zipfile
    /
    bad zipfile offset (local header sig)
    ),而使用 Archive Utility 或 Finder(右键单击 > Compress)创建的 zip 则没有这个问题。
  • zipdetails
    揭示了使用
    ditto
    与 Archive Utility 创建的 zip 之间的许多其他内部差异。 (例如,
    ditto
    zip 报告
    Created Zip Spec
    15 '2.1'
    ,而 Archive Utility zip 报告
    14 '2.0'
    。)

经过一些实验,似乎 Archive Utility zip 与

tar
创建的 zip 具有更多的内部相似性,例如:

tar --mac-metadata --format zip -cvf archive.zip -C src_parent_directory src_file_or_folder_name

也许并非巧合,

tar
也是 Apple 官方推荐从终端创建压缩文件存档(但仅适用于 tar 存档,不适用于 zip)。

问题是:

tar
创建的 zip 似乎没有正确保存 mac 元数据,这与
ditto
创建的 zip 不同,甚至与
tar
创建的 tars 不同。例如,与上面的命令不同,以下命令确实保留了 xattrs:

tar --mac-metadata -cvzf archive.tar -C src_parent_directory src_file_or_folder_name

但出于某种原因,它在创建 zip 时的行为方式不同,即使手册页中没有任何内容表明不支持此操作。 (我也试过

--mac-metadata
--xattrs
--acls
的各种组合,似乎没有任何区别。)

这似乎一定是可行的,因为 Archive Utility 能够做到。有人有建议吗?这位长期潜伏者首次发帖者将不胜感激。谢谢!

[编辑:已经一个多月了,还没有人回答……以防万一:我也会接受一个保留资源分叉和 xattrs 但不保留 acls 的解决方案。]

总结:

ditto -c -k --sequesterRsrc --keepParent src_directory archive.zip

满足要求 1 和 2,但不满足 3.

tar --mac-metadata --format zip -cvf archive.zip -C src_parent_directory src_file_or_folder_name

满足要求 1 和 3,但不满足 2.

zip -r archive.zip src_directory

满足要求 1 和 3,但不满足 2.

tar --mac-metadata -cvzf archive.tar -C src_parent_directory src_file_or_folder_name

满足要求 2,但不满足要求 1 或 3(因为结果不是 zip)

Archive Utility
Finder right-click > Compress...

满足要求 2 和 3,但不符合要求 1.

macos zip tar archive xattr
© www.soinside.com 2019 - 2024. All rights reserved.