Cómo crear un archivo zip compatible con Windows en Linux


49

Necesito hacer que un archivo zip esté disponible para todos mis visitantes usuarios de Windows, así que ingenuamente produje un archivo zip con el comando zip de Unix (llamémoslo madeinlinux.zip).

Se abre con éxito con WinRar o Winzip, pero aquellos de mis usuarios que usan el manejo estándar de archivos zip de Windows experimentan un error al intentar descomprimirlo. (Windows XP)

Comprimí los mismos datos usando el mecanismo zip incorporado de Windows, y desde el punto de vista de Linux, no puedo ver ninguna diferencia en el tipo de archivo:

$ file madeinlinux.zip :  Zip archive data, at least v2.0 to extract
$ file madeinwindows.zip : Zip archive data, at least v2.0 to extract

Deben ser algo específico para un archivo zip compatible con Windows.

¿Alguien sabe qué?


1
¿Podría producir uno de estos archivos ZIP (con contenido ficticio) y ponerlo en un servidor para que lo descarguemos e inspeccionemos?
Bernhard Hofmann

Esto suena como un caso para superuser.com, si todavía existe.

1
Bernhard seguro, aquí está el culpable: carrerajet.co.uk/devel/Services_Careerjet.zip

La única máquina de Windows que tuve que probar fue Windows 7, y no tuve problemas para abrir y extraer el archivo usando el explorador.

granizo de windows 7!

Respuestas:


28

Probar con:

zip -9 -y -r -q file.zip folder/
  • -9 Indica la velocidad de compresión más lenta (compresión óptima, ignora la lista de sufijos)
  • -y Almacene enlaces simbólicos como tales en el archivo zip, en lugar de comprimir y almacenar el archivo al que hace referencia el enlace
  • -r Recorre la estructura del directorio de forma recursiva
  • -q Modo silencioso

¿Por qué esto ayudaría con la compatibilidad con XP?
Wowfunhappy

Honestamente, fue hace tanto tiempo que no recuerdo con claridad; pero me imagino que seguir los enlaces simbólicos podría generar problemas (que podrían ocurrir sin él -r) y le -rpermite tomar todo el contenido de la carpeta
Igor Fobia

11

7zip es una herramienta de compresión de código abierto que funciona en Linux, FreeBSD, Mac OS X, BeOS, DOS, Amiga y Windows.

Lo recomendaría altamente basado en la versión de Windows.

Es compatible

embalaje / desembalaje: 7z, ZIP, GZIP, BZIP2 y TAR

Desembalaje únicamente: ARJ, CAB, CHM, CPIO, DEB, DMG, HFS, ISO, LZH, LZMA, MSI, NSIS, RAR, RPM, UDF, WIM, XAR y Z.


8
Recomiendo no usar otra herramienta patentada de terceros para esta utilidad increíblemente común (comprimir un archivo) disponible ahora en todas las plataformas.
Rick O'Shea

8

Lo único que parece relevante es esto

-k - Attempt  to  convert  the  names  and paths to conform to MSDOS, store only the MSDOS attribute (just the user write attribute from UNIX), and mark the entry as made under
MSDOS (even though it was not); for compatibility with PKUNZIP under MSDOS which cannot handle certain names such as those with two dots.

pero lea "man zip" en su sistema antes de ir a otro lado ...


1
Hola. Gracias por la sugerencia, pero esta opción -k me lleva demasiado atrás en el tiempo. Transforma todo el nombre del archivo en una versión de 8 caracteres / sin caso :(

Sí, recuerdo esos días. Pero, ¿ayudó al archivo a leer el programa Zip incorporado en Windows?

No se Este problema de nombre de archivo me dejó de intentarlo

Supongo que es la compresión, como dice MSalters ...

8

zip -Zestablece la opción de compresión. -Z storees el más trivial, ya que no se comprime en absoluto. Esto es útil cuando lo está utilizando zipcomo alternativa taro al solucionar problemas. En este caso, debe intentar ver si Windows puede usar un archivo sin comprimir. Si eso es utilizable, sabe que tendrá que elegir una opción de compresión no predeterminada.


impresionante, yo supongo que es el algoritmo de compresión que está causando problemas también ...

4

Además de lo que otros sugirieron, es importante prestar atención a los nombres de sus archivos y directorios, ya que a Windows no necesariamente le gustan las rutas y los nombres de los archivos de Linux. A veces también se les escapa de manera diferente cuando se comprime. Los ejemplos son numerosos, pero lo más importante son los archivos de puntos (. Y ..), archivos con solo diferencias de mayúsculas y minúsculas (name.txt y NAME.txt), rutas de archivos absolutas (/tmp/file.txt) . Algunos otros caracteres que están permitidos en los nombres de archivo en Windows pueden causar problemas cuando se usa el Explorador de Windows para abrir archivos. En mi caso, el personaje ':' fue el factor decisivo, pero tomó mucho trabajo descubrirlo.

Entonces, antes de reanudar el uso de muchos parámetros, le sugiero que siga un procedimiento simple:

  1. Localice la carpeta o el archivo que está comprimiendo.

  2. ejecutar: zip -9 -r -k zip-modified-names.zip / path / to / your / folder

  3. preste atención a lo que escupe la consola. En mi caso, ':' en los nombres de archivo fueron eliminados.
  4. Mueva el archivo zip a una máquina con Windows e intente abrirlo.

Si esto funciona, es mejor que elimine los caracteres que han sido eliminados por la opción -k de los nombres de archivo / directorio. Intente comprimir normalmente. Tenga en cuenta que algunos parámetros como -k tienen efectos secundarios. En este caso, -k contradice con la opción -q (para enlaces sym).

Además, la opción -k puede hacer que sus nombres de archivo sean ilegibles. En mi caso, mis archivos se nombraron en función del tiempo de creación (por ejemplo, 10: 55: 39.pdf) para facilitar la ubicación del registro requerido de los archivos, pero la opción -k lo convirtió en 105539.pdf, que los usuarios no pueden leer fácilmente. Por lo tanto, cambié los nombres a 10_55_39.pdf, que se abre en Windows sin usar la opción -k, pero aún es legible.


1
@ TD.512 ¿ha notado que la pregunta de 6 años todavía no tiene una respuesta definitiva? Es mejor agregar otra respuesta, si la respuesta parece ayudar a alguien como otros no lo hicieron.
Hola Angel

3

Tuve un problema similar recientemente con archivos producidos a partir de un script perl. Se descubrió que el zip nativo de Windows (solo Windows 7 probado) maneja incorrectamente las rutas con una barra diagonal y muestra un archivo zip vacío. La solución fue quitar la barra inclinada antes de agregar archivos. Tal vez algunas versiones del comando zip de Linux almacenan rutas de archivo con barras diagonales.


2
De acuerdo con la aplicación. Notas en el sitio de pkware ( pkware.com/support/zip-app-note/archives ): "El nombre del archivo, con la ruta relativa opcional. La ruta almacenada no debe contener una unidad o letra de dispositivo, o una barra diagonal. "
EKW

2

Aquí hay un script de Python que estoy usando para comprimir algunos archivos. Ha sido probado en ubuntu y Vista. Un zip generado en Ubuntu se abre con la cremallera Vista.

Creo que tuve un problema similar en el pasado y fue porque el formato zip no era ZIP_DEFLATED. No estoy seguro. Lo comprobaré

Espero que ayude

importar archivo zip
importación glob, os, sys

clase ZipArchive:

    def zip_it (self, dirName, archivos):
        dirNamePrefix = dirName + "/ *"
        para el nombre de archivo en glob.glob (dirNamePrefix):
            if os.path.isfile (filename) y (no self.exclude_svn o (filename.find (". svn \\") == - 1)):
                imprimir nombre de archivo
                nombre = nombre de archivo [len (self.folder) +1:]
                self.archive.write (nombre de archivo, nombre, archivo zip.ZIP_DEFLATED)

    def run (self, carpeta, nombre, exclude_svn):
        self.exclude_svn = exclude_svn
        self.folder = carpeta
        self.archive = zipfile.ZipFile (nombre + ". zip", "w")
        os.path.walk (self.folder, ZipArchive.zip_it, self)
        self.archive.close ()

if __name__ == "__main__":
    if (len (sys.argv) == 1):
        imprimir "carpeta zipit de uso [nombre] [svn: sí | no]"
    más:
        nombre = sys.argv [1]
        exclude_svn = Falso

        if (len (sys.argv)> 2): nombre = sys.argv [2]
        if (len (sys.argv)> 3): exclude_svn = (sys.argv [3] == "no")

        arch = ZipArchive ()
        arch.run (sys.argv [1], nombre, exclude_svn)
        imprimir "hecho"


la pregunta es, ¿se puede descomprimir usando el mecanismo zip de Windows?

sí. Lo he abierto con la herramienta Vista zip. Espero que funcione para ti también

0

Probablemente haya un problema en la transferencia de archivos de Linux a Windows. Si está utilizando FTP, intente configurar una transferencia binaria (comando bin en Windows, antes de la transferencia de sus archivos de Linux a Windows).


Discrepar. Me he encontrado con problemas similares a los del OP, particularmente con versiones antiguas de Windows. He hecho verificaciones de integridad y la combinación del shasum. Además, tenga en cuenta que OP dice que los archivos se descomprimen correctamente en programas de terceros.
Wowfunhappy
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.