Comment puis-je contrôler l'ordre des fichiers dans une archive ZIP?

13

Il y a des moments où il est nécessaire que les fichiers d'une archive ZIP soient dans un ordre spécifique (par exemple, je crée actuellement des EPUB , qui nécessitent que la première entrée dans le ZIP soit le mimetypefichier). Comment faire cela sous Windows?

J'utilise actuellement 7-Zip comme archiveur, mais je ne vois pas d'option pour contrôler l'ordre des fichiers. Cela peut-il être fait avec 7 zip? Sinon, quelles options ai-je?

Ben Blank
la source
3
Les ajouter dans l'ordre dans lequel ils doivent être devrait le faire. Essayez de compresser le fichier mimetype en premier, puis ajoutez les autres fichiers au zip en deuxième opération.
Paul
1
@Paul - Étonnamment, cela n'a pas fonctionné. : - /
Ben Blank
C'est LIFO peut-être? Pouvez-vous essayer d'ajouter le mimetype en dernier? Vous testez contre un lecteur epub, plutôt que de simplement décompresser?
Paul
3
Une application qui nécessite que le contenu soit dans un ordre spécifique est rompue.
psusi
3
Sheesh, les auteurs de la spécification doivent être retirés et battus avec un indice par quatre.
psusi

Réponses:

3

Une façon serait: La plupart des archiveurs et des outils d'archivage ont la possibilité d'ajouter ou d'ajouter des éléments de fichier supplémentaires à l'archive d'origine. Créez votre archive avec les éléments que vous souhaitez en haut, puis ajoutez des éléments de fichiers supplémentaires à cette archive créée. Je sais que cela fonctionne dans les propres outils ZIP de Windows.

on dirait que la vraie réponse me dépasse, ici pour C # /programming/5898787/creating-an-epub-file-with-a-zip-library

ici pour HTML (en utilisant 7z)
http://next.blurb.com/2011/02/17/how-to-make-an-ipad-photo-book/

spécifiquement cette partie

2.Ouvrez le dossier échantillon-livre photo et copiez d'abord le type de fichier dans l'archive (vide).
3.Maintenant, copiez les autres dossiers (META-INF et OEBPS) dans l'archive.


http://idpf.org/epub/30/spec/epub30-ocf.html#physical-container-zip

Le contenu du fichier mimetype ne doit pas contenir de remplissage ni d'espace, ne doit pas commencer par la signature Unicode (ou Byte Order Mark) et la casse de la chaîne de type MIME doit être exactement comme présentée ci-dessus. En outre, le fichier de type MIME ne doit être ni compressé ni chiffré, et il ne doit pas y avoir de champ supplémentaire dans son en-tête ZIP.

Psycogeek
la source
1
J'ai essayé cela en 7-zip (création d'une archive avec seulement mimetype , puis ajout des autres fichiers), mais sans succès. Les mimetype données sont arrivées en premier dans le fichier, mais la table des fichiers semble être classée par ordre alphabétique.
Ben Blank
2
@BenBlank Assurez-vous que vous ne vérifiez pas cela en utilisant un client zip - ils réorganiseront d'une manière qui convient aux humains, pas nécessairement ce qu'un lecteur epub verra.
Paul
Vraisemblablement, le problème est que 7-Zip aime maintenir son répertoire en ordre alpha et le réécrit (nécessairement) lorsqu'il ferme le fichier zip. On pourrait, en théorie, résoudre ce problème en éditant le fichier zip avec un éditeur hexadécimal ou une sorte d'outil ad hoc et en réorganisant le répertoire - ce n'est pas particulièrement compliqué. L'édition serait simplifiée en incluant un fichier factice qui trie toujours en premier. Mais alors, bien sûr, la technique du lien ci-dessus devrait également fonctionner.
Daniel R Hicks
J'avais l'habitude 7z l filename.zipde lister le contenu d'un zip, et ils ne semblent pas être dans n'importe quel ordre (nom, chemin, date, taille ...). Ainsi, l'utilisation de cette ligne de commande peut aider à déterminer le véritable ordre des fichiers dans le zip.
Scott McClenning
@Paul - Je vérifie en ouvrant le .epubdans un éditeur de texte et en examinant directement la table des fichiers, il semble donc que cette approche ne fonctionne tout simplement pas pour moi. Je vais prendre le marteau Python au problème et voir si cela ne le résout pas.
Ben Blank
3

Version GUI 7-zip:

  1. extraire mimetypedu fichier EPUB
  2. supprimer mimetypedans le fichier EPUB
  3. renommer mimetypeen!mimetype
  4. ajouter !mimetypeau fichier EPUB
  5. renommer !mimetypeau mimetypefichier EPUB intérieur

Version simple glisser-déposer à 7 zip:

Accédez à la page de téléchargement 7-zip et téléchargez 7-Zip Extra: standalone console version, 7z DLL, Plugin for Far Manager(ne fonctionne pas avec la version stable 9.20, mais fonctionne bien avec la version 9.38 beta et la version 15.06 beta). Extraire 7za.exe. Enregistrez le code ci-dessous en tant que repair.batfichier:

7za x %1 mimetype -y
7za d %1 mimetype
move /y mimetype !mimetype
7za a %1 !mimetype
del /f !mimetype
7za rn %1 !mimetype mimetype

Mettez 7za.exeet repair.batdans le même répertoire et faites simplement glisser votre fichier EPUB repair.bat.

Tithen-Firion
la source
2

La création d'un EPUB nécessite un processus en deux étapes, ajoutez d'abord le type MIME sans aucune compression (!), Puis ajoutez les autres fichiers / dossiers. Donc, en utilisant 7z, vous pouvez prendre les commandes suivantes:

7z a -mx=0 dummy.zip mimetype

Pour pouvoir utiliser le caractère générique *, vous devez déplacer le type MIME de fichier dans un autre dossier et démarrer la deuxième étape:

7z a -r dummy.zip *

Après cela, renommez le ZIP en EPUB et vous êtes parti!

Peter
la source
Je viens d'essayer ceci et j'ai toujours cette erreur:Epubcheck Version 3.0.1 ERROR: C:/MYSELF/Books/1984---George-Orwell/1984---George-Orwell.epub: Mimetype entry missing or not the first in archive
Tomáš Zato - Reinstate Monica
1

D'après mon expérience, la réponse la plus simple (pour Windows, 7, 64 bits) est d'utiliser la fonctionnalité Zip intégrée de Windows. Utilisez le bouton "Envoyer vers" pour envoyer le type MIME vers un nouveau dossier zippé, puis utilisez 7Zip pour ajouter les META-INF et OEBPS au nouveau zip. Cela semble toujours fonctionner en termes de séquencement du fichier de type MIME en premier. Je n'ai pas réussi à effectuer cette opération uniquement avec 7-zip. (C'est pour ePUBS, mais cela devrait fonctionner, pour le séquençage, dans d'autres domaines également.)

J'espère que ça aidera quelqu'un d'autre.

Kimberly Hitchens
la source
0

Utiliser winrar a fait l'affaire pour moi. J'ai ajouté le mimetype à une archive zip (non compressée!), Puis j'ai ajouté plus tard les dossiers restants, une compression régulière.

Cette solution n'a pas fonctionné avec 7-zip pour moi, car elle continue de réorganiser les fichiers.

Kat
la source
0

J'ai eu ce même problème lorsque je travaillais avec des fichiers EPUB.

Sur Windows 7, je l'ai corrigé avec cette étrange astuce où je m'assurais de trier tous les fichiers que j'allais créer dans un zip d'une manière qui faisait mimetype le fichier en haut (en les triant par taille généralement). Ensuite, je me suis assuré que j'ai marqué tous les fichiers de haut en bas avec mon curseur avant de les envoyer dans un dossier compressé (zip) (comme ceci: https://support.microsoft.com/en-us/help/14200/ windows-compress-uncompress-zip-files ). Après cela, je pouvais changer le nom et le type de fichier en n'importe quel .epub.

Cependant, après avoir mis à niveau vers Windows 10, cette astuce n'a plus fonctionné. Heureusement, j'ai trouvé un autre moyen. Commencez par envoyer le fichier souhaité en haut (mimetype) dans le fichier zip vers un dossier compressé (zip). Assurez-vous qu'il ne s'agit que de ce fichier. Ensuite, je prends les autres fichiers que je veux compresser (deux dossiers dans mon cas), marquez-les avec le curseur et faites-les glisser vers le fichier zip que je viens de créer. Windows ajoutera ensuite les nouveaux fichiers au fichier zip et conservera le fichier que vous avez initialement compressé.

MatsKS
la source
1
Pouvez-vous indiquer clairement quelle est la réponse à la question de l'auteur? La mise à niveau vers Windows 10 n'est pas vraiment une réponse à cette question. Vous devez vous concentrer sur la façon dont vous l'avez corrigé, fournir des détails, vos déclarations sont trop larges. Si je devais reproduire le problème d'origine, je serais incapable de le résoudre avec votre réponse.
Ramhound