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?
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à silenziosa7Zip è 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.
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.
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 ...
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:
Individua la cartella o file il tuo zippare.
run: Zip -9 -r -k Zip-modified-names.Zip/path/to/your/folder
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.
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.
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"
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).