Come creare un file zip compatibile con Windows sotto Linux


49

Ho bisogno di rendere un file zip disponibile a tutti i visitatori dei miei utenti Windows, quindi ho prodotto ingenuamente un file zip con il comando zip Unix (chiamiamolo madeinlinux.zip).

Si apre correttamente con WinRar o Winzip, ma quelli dei miei utenti che utilizzano la gestione standard dei file zip di Windows non riescono quando provano a decomprimerlo. (Windows XP)

Ho compresso gli stessi dati utilizzando il meccanismo zip incorporato di Windows e, dal 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?


1
Potresti produrre uno di questi file ZIP (con contenuto fittizio) e metterlo su un server per il download e l'ispezione?
Bernhard Hofmann,

Sembra un caso per superuser.com, se esiste ancora.

1
Certo Bernhard, ecco il colpevole: careerjet.co.uk/devel/Services_Careerjet.zip

L'unica macchina Windows che ho dovuto testare era Windows 7, e questo non ha avuto problemi ad aprire ed estrarre il file usando explorer.

grandine windows 7!

Risposte:


28

Prova con:

zip -9 -y -r -q file.zip folder/
  • -9 Indica la velocità di compressione più lenta (compressione ottimale, ignora l'elenco dei suffissi)
  • -y Memorizza i collegamenti simbolici come tali nell'archivio zip, anziché comprimere e archiviare il file a cui fa riferimento il collegamento
  • -r Viaggia in modo ricorsivo nella struttura delle directory
  • -q Modalità silenziosa

Perché questo aiuterebbe con la compatibilità con XP?
Wowfunhappy,

Onestamente è stato così tanto tempo fa che non ricordo chiaramente; ma posso immaginare che seguire i collegamenti simbolici possa portare a problemi (che potrebbero accadere senza -r) e -rti permette di prendere tutto il contenuto della cartella
Igor Fobia,

11

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


8
Consiglio di non utilizzare ancora un altro strumento proprietario di terze parti per questa utility incredibilmente comune (comprimere un file) disponibile ora su tutte le piattaforme.
Rick O'Shea,

8

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


1
Ciao. Grazie per il suggerimento, ma questa opzione -k mi riporta indietro nel tempo un po 'troppo. Trasforma tutti i nomi di file in una versione di 8 caratteri / nessun caso :(

Sì, ricordo quei giorni. Ma ha aiutato la lettura del file dal programma Zip integrato su Windows?

Non lo so. Questo problema nome del file mi ha smesso di cercare

La mia ipotesi è che sia la compressione, come dice MSalters ...

8

zip -Zimposta l'opzione di compressione. -Z storeè il più banale, in quanto non si comprime affatto. Ciò è utile quando si utilizza zipin alternativa taro durante la risoluzione dei problemi. In questo caso dovresti provare a vedere se un archivio non compresso è utilizzabile da Windows. Se è utilizzabile, sai che dovrai scegliere un'opzione di compressione non predefinita.


fantastico, immagino che sia l'algoritmo di compressione a causare problemi ...

4

Oltre a ciò che altri hanno suggerito, è importante prestare attenzione ai nomi dei file e delle directory poiché Windows non gradisce necessariamente il percorso e i nomi dei file Linux. A volte anche li sfugge in modo diverso quando si zippano. Esempi sono numerosi file, ma soprattutto punti (. E ..), file con solo differenze di caso (name.txt e NAME.txt), percorsi di file assoluti (/tmp/file.txt) . Alcuni altri caratteri consentiti nei nomi dei file su Windows potrebbero causare problemi quando si utilizza Esplora risorse per aprire i file. Nel mio caso ":" il personaggio è stato il punto di rottura, ma ci è voluto molto lavoro per scoprirlo.

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

  1. Individua la cartella o archivia il tuo zippare.

  2. run: zip -9 -r -k zip-modified-names.zip / path / to / your / cartella

  3. presta attenzione a ciò che la console sputa. Nel mio caso ":" nei nomi dei file sono stati eliminati.
  4. Spostare il file zip su un computer Windows e tentare di aprirlo.

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

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


1
@ TD.512 hai notato che la domanda di 6 anni non ha ancora una risposta definitiva? È meglio aggiungere un'altra risposta, se la risposta sembra aiutare qualcuno come altri no.
Ciao Angelo

3

Recentemente ha avuto un problema simile con i file prodotti da uno script perl. È stato riscontrato che zip nativo di Windows (solo Windows 7 testato) gestisce in modo errato i percorsi con una barra iniziale e visualizza un file zip vuoto. La soluzione era quella di eliminare la barra iniziale prima di aggiungere file. Forse alcune versioni del comando zip di Linux memorizzano i percorsi dei file con le barre iniziali.


2
Secondo l'app. Note sul sito pkware ( pkware.com/support/zip-app-note/archives ): "Il nome del file, con percorso relativo facoltativo. Il percorso memorizzato non deve contenere un'unità o una lettera del dispositivo o una barra iniziale. "
EKW

2

Ecco uno script Python che sto usando per comprimere alcuni file. È stato testato su Ubuntu e Vista. Una zip generata su Ubuntu si apre con la cerniera 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

classe ZipArchive:

    def zip_it (self, dirName, files):
        dirNamePrefix = dirName + "/ *"
        per il nome file in glob.glob (dirNamePrefix):
            se os.path.isfile (nome file) e (non self.exclude_svn o (nomefile.find (". svn \\") == - 1)):
                stampa il nome del file
                name = nomefile [len (self.folder) +1:]
                self.archive.write (nome file, nome, zipfile.ZIP_DEFLATED)

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

se __name__ == "__main__":
    if (len (sys.argv) == 1):
        print "utilizzo cartella zipit [nome] [svn: yes | no]"
    altro:
        name = sys.argv [1]
        exclude_svn = Falso

        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], nome, exclude_svn)
        stampa "fatto"


la domanda è: può essere decompresso usando il meccanismo zip di Windows?

sì. l'ho aperto con lo strumento zip Vista. Spero che funzioni anche per te

0

Probabilmente c'è un problema nel trasferimento dei file da Linux a Windows. Se stai usando FTP, prova a impostare un trasferimento binario (comando bin in Windows, prima del trasferimento dei tuoi file da Linux a Windows).


Disaccordo. Ho riscontrato problemi simili a quelli dell'OP, in particolare con le vecchie versioni di Windows. Ho fatto i controlli di integrità e lo shasum si combina. Inoltre, si noti che OP dice che i file si decomprimono correttamente nei programmi di terze parti.
Wowfunhappy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.