1

Я использую инструмент командной строки zip на OS X, чтобы сжать папку проекта XCode.

В эту папку включен файл .framework для OS X, который содержит символические ссылки, такие как xx.framework/Versions/Current который указывает на xx.framework/Versions/A Когда я заархивирую проект, а затем разархивирую его, обе версии /A и Versions /Current содержат один и тот же набор файлов - в основном они содержатся в архиве дважды - мне нужно избегать этого.

Однако у меня также есть символические ссылки в папке проекта, указывающие на файлы ресурсов, которые необходимо скопировать в zip-архив. Поэтому я не могу просто использовать глобальные zip-флаги для хранения символических ссылок, а не файлов / каталогов, на которые указывают.

Как я могу создать один ZIP-файл, в котором хранятся только определенные символические ссылки, в то время как другие будут хранить контент, на который они указывают?

Это вообще возможно с zip? Можно ли использовать другой zip-совместимый инструмент? Могу ли я выполнить команду zip несколько раз, исключая / включая определенные файлы, сохраняя файлы в одном и том же архиве, чтобы добиться того, что я хочу?

PS: я не могу иметь почтовый индекс внутри почтового индекса. После распаковки проект должен быть пригодным для использования и не требовать распаковки содержимого почтового индекса.


Вещи, которые я пробовал:

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 ответ1

2

Попался!

Одна проблема заключалась в том, что я использовал неправильный формат исключения, с ведущей и конечной звездочкой, это решение работает:

zip -rq4 $ZIPFILE $TARGETFOLDER -x *xx.framework*
zip -rq4uy $ZIPFILE $TARGETFOLDER -i *xx.framework*

Таким образом, он сначала архивирует папку, исключая фреймворк, копируя все файлы и папки с символическими ссылками в архив.

Вторая строка обновляет архив с флагом y (храните символические ссылки, а не файлы / папки, на которые указывает). Я явно включаю только папку фреймворка, это может не понадобиться, но я думаю, что это чище и, возможно, быстрее.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .