如何压缩档案并保留一些符号链接而不保留其他符号链接?(OS X)

如何压缩档案并保留一些符号链接而不保留其他符号链接?(OS X)

我正在使用 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(存储符号链接而不是指向的文件/文件夹)。我明确只包含框架文件夹,这可能不是必需的,但我认为它更干净,可能更快。

相关内容