如何在保留一些符號連結但不保留其他符號連結的情況下壓縮存檔? (作業系統)

如何在保留一些符號連結但不保留其他符號連結的情況下壓縮存檔? (作業系統)

我正在 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 -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(儲存符號連結而不​​是指向的檔案/資料夾)。我明確只包含框架資料夾,這可能不是必需的,但我認為它更乾淨並且可能更快。

相關內容