
Tengo varios directorios, todos son demostraciones de scripts web que he creado, el hecho importante es que todos comparten recursos. Así que creé un directorio de recursos global y vinculé simbólicamente ese directorio a cada una de las carpetas de demostración.
Lo que quiero hacer es comprimir cada directorio de demostración en un .zip
archivo, el problema que tengo es que los enlaces simbólicos se mantienen en el archivo zip y en otra máquina el directorio de recursos simplemente no existiría.
¿Hay alguna forma de comprimir una carpeta de demostración con los enlaces simbólicos resueltos para que, al descomprimirlos, los archivos aparezcan como si fueran parte de la estructura de archivos estándar?
Muchas gracias :-)
Respuesta1
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 en 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 se crea el archivo .zip en OS X? (Usando una herramienta de línea de comandos y, de ser 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 "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 y una información de marca del 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 el flujo 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 simple. Que alguien en otra Mac pueda descomprimir el archivo y hacer que represente adecuadamente la estructura original parece depender de quién o qué uses para descomprimirlo.
Por ejemplo, hace aproximadamente un mes una empresa lanzó un juego a través de Steam, el software de distribución de juegos de Valve. El paquete de aplicaciones de juego incluía la biblioteca Cg de NVIDIA en forma de marco, que internamente utiliza enlaces simbólicos. Originalmente hubo un problema con Steam que no restauraba adecuadamente 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 siguiente imagen muestra 2 copias diferentes de Cg.framework, una que instalé por separado desde el sitio web de NVIDIA (imagen superior) y la imagen inferior muestra lo que se recibió con el juego:
Observe que todos los elementos coinciden, pero lo que deberían ser enlaces simbólicos son archivos de datos simples.
Después de observar más de cerca el registro FSCatalogInfo de 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 del archivo 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 integrada 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 de manera adecuada. Creo que /usr/bin/ditto
(cuando se utiliza por su capacidad para archivar archivos) también se encarga de esto por usted. No estoy seguro si lo hago zip
o unzip
no.
Respuesta2
Este es el comportamiento predeterminado para Info-ZIP zip
. En su lugar , debe pasar -y
o --symlinks
para almacenar enlaces simbólicos dentro del archivo.
Respuesta3
La ayuda zip dice:
-y almacenar enlaces simbólicos como el enlace en lugar del archivo al que se hace referencia