it-swarm-es.tech

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

Necesito hacer que un archivo Zip esté disponible para todos los usuarios de mis usuarios de Windows, por lo que produje ingenuamente un archivo Zip con el comando Unix Zip (llamémoslo madeinlinux.Zip).

Se abre con éxito con WinRar o Winzip, pero los de mis usuarios que usan el manejo estándar de archivos Zip de Windows experimentan fallas cuando intentan descomprimirlo. (Windows XP)

Comprimí los mismos datos utilizando el mecanismo Zip incorporado de Windows, y desde un 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é?

47
user3213

Intenta 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 recursivamente la estructura del directorio
  • -q modo silencioso
26
Igor Fobia

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 solo: ARJ, CAB, CHM, CPIO, DEB, DMG, HFS, ISO, LZH, LZMA, MSI, NSIS, RAR, RPM, UDF, WIM, XAR y Z.

11
Bruce McLeod

Zip -Z establece la opción de compresión. -Z store es el más trivial, ya que no se comprime en absoluto. Esto es útil cuando está usando Zip como una alternativa para tar, o cuando está solucionando problemas. En este caso, debe intentar ver si se puede usar un archivo no comprimido desde Windows. Si se puede utilizar , sabrá que tendrá que elegir una opción de compresión no predeterminada.

8
MSalters

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 lee "man Zip" en tu sistema antes de ir a otro lugar ...

7
Dan Rosenstark

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 los nombres y las rutas de Linux. A veces también se les escapa de manera diferente cuando se cierran. Los ejemplos son numerosos, pero lo más importante archivos de puntos (. Y ..), archivos con solo diferencias de caso (name.txt y NAME.txt), rutas de archivo absolutas (/tmp/file.txt) . Algunos otros caracteres permitidos en los nombres de archivos en Windows podrían causar problemas cuando se utiliza el Explorador de Windows para abrir archivos. En mi caso ':' el personaje fue el factor decisivo, pero tomó mucho trabajo para averiguarlo.

Entonces, antes de continuar usando muchos parámetros, sugiero seguir un procedimiento simple:

  1. Localice la carpeta o el archivo de su cremallera.

  2. ejecutar: Zip -9 -r -k Zip-modified-names.Zip/ruta/a/su/carpeta

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

Si esto funciona, es mejor que elimines los caracteres que han sido eliminados por la opción -k de tus archivos/directorios. Intenta 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 fueron nombrados según el tiempo de creación (por ejemplo, 10: 55: 39.pdf) para facilitar la localización del registro requerido de los archivos, pero la opción -k lo convirtió en 105539.pdf que no es fácil de leer para los usuarios. 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 se puede leer.

4
Shakus

Recientemente tuve un problema similar con los archivos producidos a partir de un script Perl. Se encontró que las ventanas nativas Zip (solo en Windows 7 probado) manejan incorrectamente las rutas con una barra diagonal y muestran un archivo zip vacío. La solución fue eliminar la barra diagonal inicial antes de agregar archivos. Quizás algunas versiones del comando Zip de Linux almacenan rutas de archivos con barras diagonales iniciales.

3
Nicholas Hardy

Aquí hay un script de python que estoy usando para comprimir algunos archivos. Se ha probado en Ubuntu y Vista. Un Zip generado en Ubuntu se abre con la cremallera de Vista.

Creo que tuve un problema similar en el pasado y fue porque el formato Zip no era Zip_DEFLATED. No estoy seguro. Voy a comprobar eso.

Espero que ayude

 importar archivo zip 
 importar glob, os, sys 
 
 clase ZipArchive: 
 
 def Zip_it (self, dirName, files) : 
 dirNamePrefix = dirName + "/ *" 
 para el nombre de archivo en glob.glob (dirNamePrefix): 
 si 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 (auto, 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 __== "__main __": 
 if (len (sys.argv) == 1): 
 print "use zipit folder [nombre] [svn: sí | no]" 
 else: 
 name = sys.argv [1] 
 exclude_svn = False 
 
 if (len (sys.argv)> 2): name = sys.argv [2] 
 if (len (sys.argv)> 3): exclude_svn = (sys.argv [3] == "no") 
 
 Arch = ZipArchive () 
 Arch. ejecutar (sys.argv [1], nombre, exclude_svn) 
 imprimir "hecho" 
 
1
luc

Probablemente haya un problema en su 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).

0