it-swarm-eu.dev

Come creare un file Zip compatibile con Windows sotto Linux

Ho bisogno di rendere disponibile un file Zip a tutti i miei visitatori di Windows, quindi ho prodotto in modo ingenuo un file Zip con il comando Zip Unix (chiamiamolo madeinlinux.Zip).

Si apre con successo con WinRar o Winzip, ma quelli dei miei utenti che stanno utilizzando l'esperienza di gestione file zip standard di Windows durante il tentativo di decomprimerlo. (Windows XP)

Ho compresso gli stessi dati usando il meccanismo integrato Zip di Windows, e da un punto di vista di Linux, non vedo alcuna differenza nel tipo di file:

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

Devono essere qualcosa di specifico per un file Zip compatibile con Windows.

Qualcuno sa cosa?

47
user3213

Prova con:

Zip -9 -y -r -q file.Zip folder/
  • -9 Indica la velocità di compressione più bassa (compressione ottimale, ignora l'elenco dei suffissi)
  • -y Memorizza collegamenti simbolici come tali nell'archivio Zip, invece di comprimere e archiviare il file a cui fa riferimento il link
  • -r Percorri la struttura della directory in modo ricorsivo
  • -q Modalità silenziosa
26
Igor Fobia

7Zip è uno strumento di compressione open source che funziona su Linux, FreeBSD, Mac OS X, BeOS, DOS, Amiga e Windows.

Lo consiglio vivamente in base alla versione di Windows.

Supporta

imballaggio/disimballaggio: 7z, Zip, GZIP, BZIP2 e TAR

Solo disimballo: ARJ, CAB, CHM, CPIO, DEB, DMG, HFS, ISO, LZH, LZMA, MSI, NSIS, RAR, RPM, UDF, WIM, XAR e Z.

11
Bruce McLeod

Zip -Z imposta l'opzione di compressione. -Z store è il più banale, in quanto non comprime affatto. Ciò è utile quando si utilizza Zip come alternativa per tar o quando si risolvono i problemi. In questo caso dovresti provare a vedere se un archivio non compresso è utilizzabile da Windows. Se questo è utilizzabile, sai che dovrai scegliere un'opzione di compressione non predefinita.

8
MSalters

L'unica cosa che sembra rilevante è questa

-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.

ma leggi "man Zip" sul tuo sistema prima di andare da qualsiasi altra parte ...

7
Dan Rosenstark

Oltre a ciò che altri hanno suggerito, è importante prestare attenzione ai nomi dei file e delle directory poiché a Windows non piace necessariamente il percorso e i nomi dei file di Linux. A volte le sfugge anche in modo diverso quando zippano. Gli esempi sono numerosi, ma soprattutto dot file (. E ..), file con differenze di maiuscole (nome.txt e NOME.txt), percorsi di file assoluti (/tmp/file.txt) . Alcuni altri caratteri consentiti nei nomi file in Windows potrebbero causare problemi quando si utilizza Esplora risorse per aprire i file. Nel mio caso ':' il personaggio era il rompicapo ma ha impiegato molto lavoro per scoprirlo.

Quindi, prima di riprendere a utilizzare molti parametri, ti suggerisco di seguire una semplice procedura:

  1. Individua la cartella o file il tuo zippare.

  2. run: Zip -9 -r -k Zip-modified-names.Zip/path/to/your/folder

  3. presta attenzione a ciò che la console sputa. Nel mio caso ':' nei nomi dei file sono stati eliminati.
  4. Sposta il file Zip su un computer Windows e prova ad aprirlo.

Se funziona, è meglio rimuovere i caratteri che sono stati rimossi dall'opzione -k dai nomi dei file/delle directory, provare a zippare normalmente. Nota alcuni parametri come -k hanno effetti collaterali. In questo caso -k contraddice con l'opzione -q (per i collegamenti simbolici).

Anche l'opzione -k può rendere illeggibili i nomi dei file. Nel mio caso i miei file sono stati nominati in base al tempo di creazione (ad es. 10: 55: 39.pdf) per facilitare l'individuazione del record richiesto dagli archivi, ma l'opzione -k l'ha trasformata in 105539.pdf che non è facilmente leggibile dagli utenti. Quindi ho cambiato i nomi in 10_55_39.pdf che si apre su Windows senza usare l'opzione -k ma è ancora leggibile.

4
Shakus

Aveva un problema simile di recente con i file prodotti da uno script Perl. Trovato che Windows Zip nativo (testato solo per Windows 7) gestisce in modo errato i percorsi con una barra iniziale e visualizza un file zip vuoto. La soluzione consisteva nel rimuovere la barra principale prima di aggiungere i file. Forse alcune versioni del comando Zip di Linux memorizzano percorsi di file con barre iniziali.

3
Nicholas Hardy

Ecco uno script Python che sto usando per comprimere alcuni file. È stato testato su Ubuntu e Vista. Un Zip generato su Ubuntu si apre con la zip Vista.

Penso di aver avuto un problema simile in passato ed era perché il formato Zip non era Zip_DEFLATED. Non sono sicuro. Lo controllerò.

Spero possa essere d'aiuto

 import zipfile 
 import glob, os, sys 
 
 class ZipArchive: 
 
 def Zip_it (self, dirName, files) : 
 dirNamePrefix = dirName + "/ *" 
 per nome file in glob.glob (dirNamePrefix): 
 se os.path.isfile (nome file) e (non self.exclude_svn o ( nomefile.find (". svn \\") == - 1)): 
 nomefile di stampa 
 nome = nomefile [len (self.folder) +1:] 
 self .archive.write (nomefile, nome, zipfile.Zip_DEFLATED) 
 
 def run (auto, cartella, nome, exclude_svn): 
 self.exclude_svn = exclude_svn 
 self.folder = cartella 
 self.archive = zipfile.ZipFile (nome + ". Zip", "w") 
 os.path.walk (self.folder, ZipArchive.Zip_it, self) 
 self.archive.close () 
 
 se __== "__main __": 
 if (len (sys.argv) == 1): 
 stampa "cartella zipit di utilizzo [nome] [svn: sì | no]" 
 altro: 
 nome = 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. run (sys.argv [1], name, exclude_svn) 
 stampa "done" 
 
1
luc

C'è probabilmente un problema nel trasferimento dei file da Linux a Windows. Se si utilizza FTP, provare a impostare un trasferimento binario (comando bin in Windows, prima del trasferimento dei file da Linux a Windows).

0