¿Cómo puedo controlar el orden de los archivos en un archivo ZIP?

13

Hay momentos en que es necesario que los archivos en un archivo ZIP estén en un orden específico (por ejemplo, actualmente estoy creando EPUB , que requieren que la primera entrada en el mimetypearchivo ZIP sea el archivo). ¿Cómo puedo hacer esto en Windows?

Actualmente estoy usando 7-Zip como mi archivador, pero no veo una opción para controlar el orden de los archivos. ¿Se puede hacer esto con 7-zip? Si no, ¿qué opciones tengo?

Ben Blank
fuente
3
Agregarlos en el orden en que deben estar debería hacer esto. Intente comprimir primero el archivo mimetype, luego agregue los otros archivos al zip como segunda operación.
Paul
1
@Paul - Sorprendentemente, eso no funcionó. : - /
Ben Blank
¿Es LIFO tal vez? ¿Puedes intentar agregar mimetype al final? ¿Estás probando contra un lector epub correcto, en lugar de simplemente descomprimir?
Paul
3
Se rompe una aplicación que requiere que el contenido esté en un orden específico.
psusi
3
Sheesh, los autores de la especificación deben ser retirados y golpeados con una pista de cuatro en cuatro.
psusi

Respuestas:

3

Una forma sería: la mayoría de los archivadores y las herramientas de archivo tienen la capacidad de agregar o agregar elementos de archivo adicionales al archivo original. Cree su archivo con los elementos que desea en la parte superior, luego agregue elementos de archivos adicionales a ese archivo creado. Sé que esto funciona en las propias herramientas ZIP de Windows.

Parece que la respuesta real está más allá de mí, aquí para C # /programming/5898787/creating-an-epub-file-with-a-zip-library

aquí para HTML (usando 7z)
http://next.blurb.com/2011/02/17/how-to-make-an-ipad-photo-book/

específicamente esta parte

2. Abra la carpeta del libro de fotos de muestra y copie primero el archivo mimetype en el archivo (vacío).
3.Ahora, copie las otras carpetas (META-INF y OEBPS) en el archivo.


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

El contenido del archivo mimetype no debe contener ningún espacio inicial o espacio en blanco, no debe comenzar con la firma Unicode (o la marca de orden de bytes), y el caso de la cadena de tipo MIME debe ser exactamente como se presentó anteriormente. El archivo tipo MIME adicionalmente no debe estar comprimido ni cifrado, y no debe haber un campo adicional en su encabezado ZIP.

Psycogeek
fuente
1
Intenté esto en 7-zip (creando un archivo con solo mimetype , luego agregando los otros archivos), pero no tuve éxito. Los mimetype datos llegaron primero en el archivo, pero la tabla de archivos parece estar ordenada alfabéticamente.
Ben Blank
2
@BenBlank Asegúrate de no verificar esto usando un cliente zip; reordenarán de una manera que se adapte a los humanos, no necesariamente lo que verá un lector epub.
Paul
Presumiblemente, el problema es que a 7-Zip le gusta mantener su directorio en orden alfa y luego (necesariamente) lo reescribe cuando cierra el archivo zip. Uno podría, en teoría, solucionar esto editando el archivo zip con un editor hexadecimal o algún tipo de herramienta ad-hoc y reorganizando el directorio, no es particularmente complicado. La edición se simplificaría al incluir un archivo ficticio que siempre se clasifica primero. Pero, por supuesto, la técnica en el enlace anterior también debería funcionar.
Daniel R Hicks
Solía 7z l filename.zipenumerar los contenidos de un zip, y no parecen estar en ningún orden (nombre, ruta, fecha, tamaño ...). Por lo tanto, el uso de esta línea de comando puede ayudar a determinar el verdadero orden de los archivos en el archivo zip.
Scott McClenning
@Paul: estoy comprobando abriendo el .epubeditor de texto y examinando la tabla de archivos directamente, por lo que parece que este enfoque simplemente no funciona para mí. Voy a llevar el martillo de Python al problema y ver si eso no lo soluciona.
Ben Blank
3

Versión GUI de 7 zip:

  1. extraer mimetypedel archivo EPUB
  2. eliminar mimetypeen el archivo EPUB
  3. renombrar mimetypea!mimetype
  4. agregar !mimetypeal archivo EPUB
  5. cambiar el nombre !mimetypeal mimetypearchivo EPUB interno

Versión simple de arrastrar y soltar de 7 zip:

Vaya a la página de descarga de 7-zip y descargue 7-Zip Extra: standalone console version, 7z DLL, Plugin for Far Manager(no funciona con 9.20 estable, pero funciona bien con 9.38 beta y 15.06 beta). Extracto 7za.exe. Guarde el código a continuación como repair.batarchivo:

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

Coloque 7za.exey repair.baten el mismo directorio y simplemente arrastre su archivo EPUB repair.bat.

Tithen-Firion
fuente
2

Crear un EPUB requiere un proceso de dos pasos, primero agregue mimetype sin compresión (!), Luego agregue los otros archivos / carpetas. Entonces, usando 7z, podría tomar los siguientes comandos:

7z a -mx=0 dummy.zip mimetype

Para poder usar el comodín *, debe mover el archivo mimetype a otra carpeta y comenzar el segundo paso:

7z a -r dummy.zip *

Después de eso, cambie el nombre del ZIP a EPUB y ¡ya no estará!

Peter
fuente
Acabo de intentar esto y sigo recibiendo este error: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 - Restablecer a Monica
1

En mi experiencia, la respuesta más simple (para Windows, 7, 64 bits) es usar la funcionalidad Zip integrada de Windows. Use "Enviar a" para enviar el tipo MIME a una nueva carpeta comprimida, luego use 7Zip para agregar META-INF y OEBPS al nuevo zip. Parece que siempre funciona en términos de secuenciar primero el archivo mimetype. No he tenido éxito realizando esta operación únicamente con 7-zip. (Esto es para ePUBS, pero también debería funcionar, para la secuenciación, en otras áreas).

Espero que esto ayude a alguien más.

Kimberly Hitchens
fuente
0

Usar winrar me sirvió. Agregué el mimetype a un archivo zip (¡sin comprimir!), Luego agregué las carpetas restantes, compresión regular.

Esta solución no funcionó con 7-zip para mí, ya que sigue reordenando archivos.

kat
fuente
0

Tuve el mismo problema al trabajar con archivos EPUB.

En Windows 7 lo arreglé con este extraño truco en el que me aseguré de ordenar todos los archivos que iba a hacer en un archivo zip de una manera que hizo que el archivo fuera mimetype en la parte superior (generalmente los clasifico por tamaño). Luego me aseguré de marcar todos los archivos de arriba a abajo con mi cursor antes de enviarlos a una carpeta comprimida (zip) (como esta: https://support.microsoft.com/en-us/help/14200/ windows-compress-descompress-zip-files ). Después de eso, podría cambiar el nombre y el tipo de archivo a cualquier .epub.

Sin embargo, después de actualizar a Windows 10, este truco ya no funcionó. Por suerte he encontrado otra manera. Primero envía el archivo que desea en la parte superior (tipo mime) del archivo zip a una carpeta comprimida (zip). Asegúrese de que sea solo ese archivo. Luego tomo los otros archivos que quiero comprimir (dos carpetas en mi caso), márquelos con el cursor y arrástrelos hasta el archivo zip que acabo de crear. Windows agregará los nuevos archivos al archivo zip y mantendrá el archivo que originalmente comprimió en la parte superior.

MatsKS
fuente
1
¿Puede indicar claramente cuál es la respuesta a la pregunta del autor? Actualizar a Windows 10 no es realmente una respuesta a esta pregunta. Debe concentrarse en cómo lo solucionó, proporcionar detalles, sus declaraciones son amplias. Si reprodujera el problema original, no podría resolverlo con su respuesta.
Ramhound