
Eu tenho vários diretórios, todos são demonstrações de scripts da web que criei, o fato importante é que todos compartilham recursos. Portanto, criei um diretório de recursos globais e vinculei simbolicamente esse diretório a cada uma das pastas de demonstração.
O que eu quero fazer é compactar cada diretório de demonstração em um .zip
arquivo, o problema que tenho é que os links simbólicos são mantidos no arquivo zip e em outra máquina o diretório de recursos simplesmente não existiria.
Existe uma maneira de compactar uma pasta de demonstração com links simbólicos resolvidos para que, quando descompactados, os arquivos apareçam como se fizessem parte da estrutura de arquivos padrão?
Muito obrigado :-)
Responder1
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 pasta raiz específica, 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 delas, ou usando o Archive Utility, etc.)
3) Qual sistema operacional está sendo executado no computador de destino (onde o arquivo será descompactado) e qual método você está usando para descompactar o arquivo lá?
Em primeiro lugar, no OS X, os links simbólicos são basicamente arquivos de texto simples com algumas informações extras do "Mac" que permitem ao OS X saber que deve tratar o arquivo como um link simbólico. Essas informações extras do Mac são um tipo de arquivo especial, código do criador e informações de sinalizador do Finder, que são armazenadas não no arquivo em si, mas no diretório do 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, de certa forma, o link simbólico é armazenado no arquivo zip como um arquivo simples. Se alguém em outro Mac pode descompactar o arquivo e fazer com que ele represente adequadamente a estrutura original, parece depender de quem ou o que você usa para descompactá-lo.
Por exemplo, há cerca de um mês, uma empresa lançou um jogo no Steam, o software de distribuição de jogos da Valve. O pacote de aplicativos de jogos incluía a biblioteca Cg da NVIDIA na forma de uma estrutura, que usa links simbólicos internamente. Originalmente, havia um problema com o Steam não restaurando corretamente as informações necessárias do Mac no Trine.app, conforme mencionado neste tópico: http://forums.steampowered.com/forums/showthread.php?t=1556083
A imagem abaixo mostra 2 cópias diferentes do Cg.framework, uma que eu instalei separadamente do site da NVIDIA (imagem superior), e a imagem inferior mostra o que foi recebido com o jogo:
Observe que todos os itens correspondem, mas o que deveriam ser links simbólicos são arquivos de dados simples.
Depois de examinar mais de perto o registro FSCatalogInfo de ambos os itens, ficou claro para mim qual era o problema:
Você notará na imagem superior que o início da estrutura finderInfo tem os seguintes valores:
0x736C6E6B = 'slnk'
0x72686170 = 'rhap'
Esses valores sã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 nono byte, 0x80, corresponde ao kIsAlias
sinalizador do arquivo 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 possíveis arquivos no arquivo que está sendo descompactado que representam links simbólicos e para definir as informações adequadamente. 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
não.
Responder2
Este é o comportamento padrão para Info-ZIPs zip
. Você precisa passar -y
ou --symlinks
para armazenar links simbólicos no arquivo.
Responder3
A ajuda do Zip diz:
-y armazena links simbólicos como o link em vez do arquivo referenciado