使用 -jr 标志创建的 zip 在 macOS 上的解压缩方式不同,当双击与运行解压缩时

Posted

技术标签:

【中文标题】使用 -jr 标志创建的 zip 在 macOS 上的解压缩方式不同,当双击与运行解压缩时【英文标题】:zip created using -jr flags unzipped differently on macOS when double clicking vs running unzip 【发布时间】:2021-04-06 15:08:40 【问题描述】:

我正在将 Plugins 文件夹中的 .xctest 文件压缩到通过构建我的应用程序生成的 .app 目标内。我有一个在我的测试目标中最后运行的构建阶段脚本来复制这个文件。我使用以下脚本进行压缩:

XCTEST_FILE=$TARGET_BUILD_DIR/$TARGET_NAME.xctest
XCTEST_ZIP=$TARGET_BUILD_DIR/../../$TARGET_NAME.xctest.zip
zip -jr $XCTEST_ZIP $XCTEST_FILE

这给了我TestTarget.xctest.zip 文件。但是它根据这两种方法解压不同,

解压缩 TestTarget.xctest.zip

-TestTarget -代码资源 -Info.plist

在finder中双击TestTarget.xctest.zip

-TestTarget.xctest --TestTarget --代码资源 --Info.plist

为什么解压到最里面的节点并解压所有文件?我希望 unzip 命令给我.xctest 目录。我尝试将 zip 文件重命名为 TestTarget.zip,但它的行为仍然相似。

我最初使用zip -r $XCTEST_ZIP $XCTEST_FILE 进行压缩,但问题是当我双击解压缩文件时,它会保留根目录 (\) 的整个文件夹结构。帖子建议使用-j 标志而不是-r。但只是-j 导致没有生成压缩文件。另一条评论推荐-jr,它创建了一个zip,双击它时生成了我期望的输出。但我猜unzip 命令的作用不同。

类似问题:MacOs zip file - different result when double click and running unzip command

这里的错误原因非常不同,

问题出在创建文件的时间。它与 MacOs 问题无关,但在 windows 中存在某些路径长度已知问题

【问题讨论】:

【参考方案1】:

基于How to zip folder without full path,我必须先将我的脚本更新为cdTARGET_BUILD_DIR,然后再生成zip。我还必须删除 -j 标志,以便在运行 unzip 时保留本地文件夹结构。

cd $TARGET_BUILD_DIR
XCTEST_FILE=./$TARGET_NAME.xctest
XCTEST_ZIP=../../$TARGET_NAME.xctest.zip
zip -r $XCTEST_ZIP $XCTEST_FILE

【讨论】:

以上是关于使用 -jr 标志创建的 zip 在 macOS 上的解压缩方式不同,当双击与运行解压缩时的主要内容,如果未能解决你的问题,请参考以下文章

Keka 1.1.20 macOS 压缩文件管理器

Java压缩正在改变创建文件的日期

如何在Linux下创建与解压zip, tar, tar.gz和tar.bz2文件

如何在Linux下创建与解压zip, tar, tar.gz和tar.bz2文件

对于“_”标志性的 zip c#,zip 提取全部失败

如何轻松归档文件?2种方法轻松创建归档文件!