2008-09-20 12 views
22

Sous Mac OS X, vous pouvez créer une archive zip à partir du Finder en sélectionnant certains fichiers et en sélectionnant "Compresser" dans le menu contextuel ou dans le menu Fichier. Malheureusement, le fichier résultant n'est pas identique à l'archive créée par la commande zip (avec les options par défaut).Comment créer un fichier zip dans le même format que l'élément de menu "Compresser" du Finder?

Cette distinction est importante pour au moins un service exploité par Apple, qui n'accepte pas les archives créées avec la commande zip. Le fait de devoir créer des archives manuellement m'empêche d'automatiser entièrement mon processus de génération de versions.

Comment puis-je créer une archive zip au format correct dans un script shell?

EDIT: Depuis la rédaction de cette question il y a longtemps, je l'ai compris que la différence essentielle entre ditto et zip est la façon dont ils gèrent les liens symboliques: parce que la signature de code à l'intérieur d'un paquet d'application contient un lien symbolique, il doit être préservé comme un lien et non stocké comme un fichier régulier. ditto le fait par défaut, mais pas zip (l'option -y est requise).

+0

Quelle version de OS X vous utilisez? – freespace

+0

Essayez ceci - créez une archive en utilisant finder avec un seul fichier dedans, peu importe ce que c'est. Maintenant, ajoutez un fichier à l'aide de la ligne de commande zip. Cela devrait seulement modifier le répertoire zip maître, et laisser la magie de la pomme seule - peut-être assez pour passer les détecteurs: P – freespace

Répondre

14

Utilisez l'outil de ligne de commande ditto comme suit:

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

Voir la page de manuel pour plus ditto.

+1

Avec cela, je ne peux toujours pas produire un .zip qui a la même signature que la fonction de compression du Finder. Cependant, je ne savais pas à propos de Ditto: D – freespace

+0

De même, mais il semble beaucoup plus proche que la sortie de «zip».Les différences pourraient être des timestamps ou similaires. –

+9

N'oubliez pas d'ajouter --keepParent. Si vous lisez la page man (man ditto): La commande: ditto -c -k --sequesterRsrc --keepParent src_directory archive.zip créera une archive PKZip de manière similaire à la fonctionnalité Finder's Compress. – Harry

1

L'indice est dans la balise 'automation'.

Créez une action dans Automator.app qui utilise l'action 'Create Archive', invoquez-la depuis la ligne de commande (voir 'automator').

+0

Intéressant, je n'avais aucune idée qu'il y avait une commande de shell automator! Mais cela ne va-t-il pas faire rebondir le petit robot dans mon Dock chaque fois que je construis? – benzado

+0

Tant que l'action ne demande pas de saisie, elle doit s'exécuter sans surveillance et sans aucun robot rebondissant. –

+0

Automator, y compris l'outil de ligne de commande, nécessite un accès au gestionnaire de fenêtres et ne peut donc être lancé que dans le cadre d'une session de console, sans surveillance. – millenomi

17

J'ai un script ruby ​​qui fait que l'iPhone App Store se construit pour moi, mais les zips qu'il générait ne seraient pas acceptés par iTunes Connect. Ils ont été acceptés si j'ai utilisé la fonction "Compress" de Finder.

La réponse de millenomi est venue près de moi, mais cette commande est ce qui a fini par fonctionner. iTunes Connect a accepté ma build, et l'application a été approuvée et peut être téléchargée sans problème, elle a donc été testée.

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

homme Etats Ditto:

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

avis --keepParent

Questions connexes