2

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

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

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

Большое спасибо :-)

3 ответа3

6

Пара вопросов:1) Использует ли внутренняя структура папок символические ссылки для экономии места? (Под "внутренним" я подразумеваю, учитывая конкретную корневую папку, символические ссылки в этой корневой папке относятся только к другим файлам или каталогам, которые также находятся в этой папке?).

2) Как вы создаете архив .zip в OS X? (С помощью инструмента командной строки, и если да, то какой, или с помощью утилиты архивирования и т.д.)

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

Прежде всего, в OS X символические ссылки - это в основном простые текстовые файлы с некоторой дополнительной информацией "Mac", которая позволяет OS X знать, что он должен обрабатывать файл как символическую ссылку. Эта дополнительная информация для Mac представляет собой специальный тип файла, код создателя и информацию о флаге Finder, которая хранится не в самом файле, а в каталоге диска HFS+.

В OS X, когда вы создаете файл .zip, в потоке zip нет места для этой дополнительной информации Mac, поэтому в некотором смысле символическая ссылка хранится в файле zip в виде простого файла. Может ли кто-то на другом Mac разархивировать архив и правильно ли он представить оригинальную структуру, зависит от того, кто или что вы используете для его разархивирования.

Например, около месяца назад компания выпустила игру поверх Steam, программного обеспечения Valve для распространения игр. В комплект игрового приложения входила библиотека Cid от NVIDIA в форме фреймворка, в котором внутренне используются символические ссылки. Первоначально была проблема со Steam, неправильно восстанавливающим необходимую информацию Mac на Trine.app, как упомянуто в этой теме:http://forums.steampowered.com/forums/showthread.php?t=1556083

На изображении ниже показаны 2 разные копии Cg.framework, одну я установил отдельно от веб-сайта NVIDIA (верхнее изображение), а нижнее изображение показывает, что было получено с игрой:

альтернативный текст

Обратите внимание, что все элементы совпадают, но символические ссылки должны быть простыми файлами данных.

После более внимательного изучения записи FSCatalogInfo для обоих элементов мне стало ясно, в чем проблема:

альтернативный текст

На верхнем изображении вы заметите, что начало структуры finderInfo имеет следующие значения:

0x736C6E6B = 'slnk'
0x72686170 = 'rhap'

Эти значения определены в /usr/include/hfs/hfs_format.h:

/*
 *  File type and creator for symbolic links
*/
enum {
    kSymLinkFileType  = 0x736C6E6B, /* 'slnk' */
    kSymLinkCreator   = 0x72686170  /* 'rhap' */
};

Девятое значение байта, 0x80, соответствует kIsAlias объекта finderInfo.finderFlags . Это значение определено в /System/Library/Frameworks/CoreServices.framework /.../CarbonCore.framework /.../Headers/Finder.h:

enum {
    kIsAlias                      = 0x8000 /* Files only */
};

Похоже, что функция разархивирования, встроенная в OS X (Archive Utility), жестко запрограммирована для поиска возможных файлов в разархивированном архиве, которые представляют символические ссылки, и для установки информации соответствующим образом. Я считаю, что /usr/bin/ditto (когда используется для его способности архивировать файлы) также позаботится об этом за вас. Я не уверен, что делать с zip или unzip .

5

Это поведение по умолчанию для почтового zip Info-ZIP. Вам нужно передать -y или --symlinks , чтобы вместо этого хранить символические ссылки в архиве.

3

Справка Zip гласит:

-y хранить символические ссылки в качестве ссылки вместо ссылочного файла

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