使用 -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,我必须先将我的脚本更新为cd
到TARGET_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 上的解压缩方式不同,当双击与运行解压缩时的主要内容,如果未能解决你的问题,请参考以下文章
如何在Linux下创建与解压zip, tar, tar.gz和tar.bz2文件