2008-09-20 13 views
22

En Mac OS X, puede crear un archivo zip desde el Finder seleccionando algunos archivos y seleccionando "Comprimir" en el menú contextual o en el menú Archivo. Desafortunadamente, el archivo resultante no es idéntico al archivo creado por el comando zip (con las opciones predeterminadas).¿Cómo crear un archivo zip en el mismo formato que el elemento de menú "Comprimir" del Finder?

Esta distinción es importante para al menos un servicio operado por Apple, que no acepta los archivos creados con el comando zip. Tener que crear archivos manualmente me impide automatizar por completo mi proceso de creación de versiones.

¿Cómo puedo crear un archivo zip en el formato correcto dentro de un script de shell?

EDIT: Después de haber escrito esta pregunta hace mucho tiempo, he descubierto que la diferencia clave entre ditto y zip es la forma en que manejan los enlaces simbólicos: porque la firma de código dentro de un paquete de aplicación contiene un enlace simbólico, que necesita ser preservado como un enlace y no almacenado como un archivo normal. ditto lo hace de manera predeterminada, pero zip no (se requiere la opción -y).

+0

¿Qué versión de OS X que se ejecuta? – freespace

+0

Pruebe esto: cree un archivo usando el buscador con un solo archivo, no importa de qué se trate. Ahora agregue un archivo usando la línea de comando zip. Esto solo debería modificar el directorio maestro de zip, y dejar la magia de manzana sola, podría ser suficiente para pasar los detectores: P – freespace

Respuesta

14

Utilice la herramienta de línea de comandos ídem de la siguiente manera:

ditto -ck --rsrc --sequesterRsrc folder file.zip 

consulte la página del mismo para más.

+1

Con esto, todavía no puedo producir un archivo .zip que tenga la misma firma que la función de compresión del Finder. Sin embargo, no sabía sobre ídem: D – freespace

+0

Del mismo modo, pero se ve mucho más cerca que la salida de 'zip'.Las diferencias pueden deberse a marcas de tiempo o similares. –

+9

Recuerde agregar --keepParent. Si lee la página man (man ditto): El comando: ditto -c -k --sequesterRsrc --keepParent src_directory archive.zip creará un archivo PKZip similar a la funcionalidad Compress del Finder. – Harry

1

La pista está en la etiqueta 'automatización'.

Crea una acción en Automator.app que utiliza la acción 'Crear archivo', invocala desde la línea de comandos (ver 'automatizador').

+0

¡Es interesante, no tenía idea de que hubiera un comando de shell automático! ¿Pero eso no hará que el pequeño robot rebote en mi Dock cada vez que construyo? – benzado

+0

Siempre que la acción no solicite la entrada, debe ejecutarse sin supervisión y sin ningún robot de rebote de ningún tipo. –

+0

Automator, incluida la herramienta de línea de comandos, requiere acceso al administrador de ventanas y, por lo tanto, solo se puede iniciar como parte de una sesión de consola, no desatendida. – millenomi

17

Tengo un script de ruby ​​que hace que iPhone App Store cree para mí, pero las cremalleras que estaba generando no serían aceptadas por iTunes Connect. Fueron aceptados si usé la función "Compress" de Finder.

La respuesta de millenomi estuvo cerca para mí, pero este comando fue lo que terminó funcionando. iTunes Connect aceptó mi compilación, y la aplicación se aprobó y se puede descargar sin problemas, por lo que se prueba.

ditto -c -k --sequesterRsrc --keepParent AppName.app AppName.zip 
8

hombre estados ídem:

The command: 
     ditto -c -k --sequesterRsrc --keepParent src_directory archive.zip 
will create a PKZip archive similarly to the Finder's Compress functionality. 

aviso --keepParent

Cuestiones relacionadas