Algumas perguntas: 1) A estrutura de pastas que você está arquivando usa links simbólicos internamente para economizar espaço? (Por "internamente", quero dizer, dada uma determinada pasta raiz, os links simbólicos dentro dessa pasta raiz referem-se apenas a outros arquivos ou diretórios que também estão dentro dessa pasta?).
2) Como você está criando o arquivo .zip no OS X? (Usando uma ferramenta de linha de comando e, em caso afirmativo, qual deles, ou usando o Utilitário de Arquivo, etc.)
3) Qual sistema operacional é o computador de destino (onde o arquivo será descompactado) em execução, e qual método você está usando para descompactar o arquivo?
Em primeiro lugar, no OS X, os links simbólicos são basicamente arquivos de texto simples com alguma informação extra "Mac" que permite ao OS X saber que deve tratar o arquivo como um link simbólico. Essa informação extra do Mac é um tipo de arquivo especial, código do criador e informações de sinalizador do Finder, que não são armazenadas no próprio arquivo, mas no diretório de disco HFS +.No OS X, quando você cria um arquivo .zip, não há espaço no fluxo zip para essas informações extras do Mac, portanto, em certo sentido, o link simbólico é armazenado no arquivo zip como um arquivo simples. Se alguém em outro Mac pode descompactar o arquivo e representá-lo corretamente, a estrutura original parece depender de quem ou o que você usa para descompactá-lo.
Por exemplo, há um mês ou mais, uma empresa lançou um jogo no Steam, o software de distribuição de jogos da Valve. O pacote de aplicativos do jogo incluía a biblioteca Cg da NVIDIA na forma de uma estrutura, que usa internamente links simbólicos. Houve originalmente um problema com o Steam não restaurando corretamente as informações necessárias do Mac no Trine.app, como mencionado neste tópico: link
A imagem abaixo mostra 2 cópias diferentes do arquivo Cg, uma que eu instalei separadamente do site da NVIDIA (imagem superior), e a imagem inferior mostra o que foi recebido com o jogo:
Observequetodosositenscorrespondem,masoquedeveserlinkssimbólicossãoarquivosdedadossimples.
DepoisdeolharmaisdepertooregistroFSCatalogInfoparaosdoisitens,ficouclaroparamimqualeraoproblema:
Você notará na imagem superior que o início da struct finderInfo possui os seguintes valores:
0x736C6E6B = 'slnk'
0x72686170 = 'rhap'
Estes valores estão definidos em /usr/include/hfs/hfs_format.h:
/*
* File type and creator for symbolic links
*/
enum {
kSymLinkFileType = 0x736C6E6B, /* 'slnk' */
kSymLinkCreator = 0x72686170 /* 'rhap' */
};
O valor do 9º byte, 0x80, corresponde ao sinal kIsAlias
do finderInfo.finderFlags
. Esse valor é definido em /System/Library/Frameworks/CoreServices.framework /.../ CarbonCore.framework /.../ Headers / Finder.h:
enum {
kIsAlias = 0x8000 /* Files only */
};
Parece que o recurso de descompactação integrado ao OS X (Archive Utility) é codificado para procurar por possíveis arquivos no archive que está sendo descompactado, que representam links simbólicos e para definir as informações adequadamente. Eu acredito que /usr/bin/ditto
(quando usado por sua capacidade de arquivar arquivos) também cuida disso para você. Não tenho certeza se zip
ou unzip
do.