我正在使用 OS X 上的 zip 命令行工具来压缩 Xcode 项目文件夹。
该文件夹中包含一个适用于 OS X 的 .framework,其中包括xx.framework/Versions/Current
指向 的符号链接xx.framework/Versions/A
。当我压缩项目然后解压缩时,Versions/A 和 Versions/Current 都包含相同的文件集 - 基本上它们在存档中包含两次 - 我需要避免这种情况。
但是,项目文件夹中还有指向需要在 zip 存档中复制的资源文件的符号链接。因此,我不能只使用全局 zip 标志来存储符号链接,而不是指向的文件/目录。
如何创建一个 ZIP 文件,其中仅存储某些符号链接,而其他符号链接存储它们指向的内容?
使用 zip 是否可行?还有其他兼容 zip 的工具可以使用吗?我可以多次运行 zip 命令,排除/包含某些文件,同时将文件存储到同一个存档中以实现我想要的效果吗?
PS:我不能在 zip 中再放 zip 文件。一旦解压,项目必须可用,而不需要解压包含的 zip 文件。
我尝试过的事情:
zip -rq4y $ZIPFILE $TARGETFOLDER/xx.framework
zip -rq4u $ZIPFILE $TARGETFOLDER
想法是先压缩 .framework,保留符号链接。然后更新存档以添加其余文件,包括存档中尚未包含的符号链接指向的任何文件/文件夹(我希望如此)。结果:存档损坏(错误 20 - 不是目录)。
我也尝试了相反的方法,第一次尝试排除框架,然后用框架更新档案:
zip -rq4 $ZIPFILE $TARGETFOLDER -x xx.framework
zip -rq4uy $ZIPFILE $TARGETFOLDER
结果:档案损坏(错误 21 - 是一个目录)。
答案1
明白了!
一个问题是我使用了错误的排除格式,使用前导和尾随星号这个解决方案有效:
zip -rq4 $ZIPFILE $TARGETFOLDER -x *xx.framework*
zip -rq4uy $ZIPFILE $TARGETFOLDER -i *xx.framework*
因此,它首先压缩不包括框架的文件夹,然后将所有符号链接的文件/文件夹复制到档案中。
第二行使用标志更新存档y
(存储符号链接而不是指向的文件/文件夹)。我明确只包含框架文件夹,这可能不是必需的,但我认为它更干净,可能更快。