Un par de preguntas: 1) ¿La estructura de carpetas que está archivando utiliza enlaces simbólicos internamente para ahorrar espacio? (Por "internamente", quiero decir, dada una carpeta raíz particular, ¿los enlaces simbólicos dentro de esa carpeta raíz solo se refieren a otros archivos o directorios que también están dentro de esa carpeta?).
2) ¿Cómo está creando el archivo .zip en OS X? (Usando una herramienta de línea de comando, y si es así, cuál, o usando Archive Utility, etc.)
3) ¿Qué sistema operativo está ejecutando la computadora de destino (donde se descomprimirá el archivo) y qué método está utilizando para descomprimir el archivo allí?
En primer lugar, en OS X, los enlaces simbólicos son básicamente archivos de texto sin formato con información adicional de "Mac" que le permite a OS X saber que debe tratar el archivo como un enlace simbólico. Esta información adicional de Mac es un tipo de archivo especial, un código de creador e información de indicador de Finder, que no se almacena en el archivo en sí, sino en el directorio del disco HFS +.
En OS X, cuando crea un archivo .zip, no hay espacio en la secuencia zip para esta información adicional de Mac, por lo que, en cierto sentido, el enlace simbólico se almacena dentro del archivo zip como un archivo sin formato. Si alguien en otra Mac puede descomprimir el archivo y hacer que represente adecuadamente la estructura original parece depender de quién o qué utilizas para descomprimirlo.
Por ejemplo, hace aproximadamente un mes, una compañía lanzó un juego sobre Steam, el software de distribución de juegos de Valve. El paquete de la aplicación del juego incluía la biblioteca Cg de NVIDIA en forma de marco, que internamente usa enlaces simbólicos. Originalmente había un problema con Steam que no restauraba correctamente la información necesaria de Mac en Trine.app como se menciona en este hilo:
http://forums.steampowered.com/forums/showthread.php?t=1556083
La imagen a continuación muestra 2 copias diferentes del marco Cg., una que instalé por separado del sitio web de NVIDIA (imagen superior), y la imagen inferior muestra lo que se recibió con el juego:
Tenga en cuenta que todos los elementos coinciden, pero lo que deberían ser enlaces simbólicos son archivos de datos simples.
Después de mirar más de cerca el registro FSCatalogInfo para ambos elementos, me quedó claro cuál era el problema:
Notarás en la imagen superior que el comienzo de la estructura finderInfo tiene los siguientes valores:
0x736C6E6B = 'slnk'
0x72686170 = 'rhap'
Estos valores se definen en /usr/include/hfs/hfs_format.h:
/*
* File type and creator for symbolic links
*/
enum {
kSymLinkFileType = 0x736C6E6B, /* 'slnk' */
kSymLinkCreator = 0x72686170 /* 'rhap' */
};
El valor del noveno byte, 0x80, corresponde a la kIsAlias
bandera de finderInfo.finderFlags
. Ese valor se define en /System/Library/Frameworks/CoreServices.framework/.../CarbonCore.framework/.../Headers/Finder.h:
enum {
kIsAlias = 0x8000 /* Files only */
};
Parece que la función de descomprimir incorporada en OS X (utilidad de archivo) está codificada para buscar posibles archivos en el archivo que se está descomprimiendo que representen enlaces simbólicos, y para configurar la información adecuadamente. Creo que /usr/bin/ditto
(cuando se usa por su capacidad de archivar archivos) también se encarga de esto por usted. No estoy seguro de si zip
o unzip
si.
zip -r -y demo.zip demo/
el enlace simbólico aparece como un archivo, no como un directorio. El archivo no tiene icono ni tipo de archivo: S