So erstellen Sie eine mit Windows kompatible ZIP-Datei unter Linux

57312
studiohack

Ich muss eine ZIP-Datei für alle meine Windows-Benutzer zur Verfügung stellen. Daher habe ich mit dem Unix-ZIP-Befehl (wir nennen ihn madeinlinux.zip) naiv eine ZIP-Datei erstellt.

Es wird erfolgreich mit WinRar oder Winzip geöffnet, aber die Benutzer meiner Benutzer, die die standardmäßige Windows-ZIP-Dateibehandlung verwenden, haben beim Versuch, sie zu entpacken, einen Fehler. (Windows XP)

Ich habe dieselben Daten mit dem integrierten ZIP-Mechanismus von Windows komprimiert, und aus Linux-Sicht kann ich keinen Unterschied im Dateityp erkennen:

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

Sie müssen etwas spezifisch für eine Windows-kompatible ZIP-Datei sein.

Weiß jemand was?

42
Könnten Sie eine dieser ZIP-Dateien (mit Dummy-Inhalt) erstellen und auf einen Server stellen, damit wir sie herunterladen und prüfen können? Bernhard Hofmann vor 15 Jahren 1
Das hört sich nach einem Fall für superuser.com an, sofern er noch existiert. vor 15 Jahren 0
Sicher bernhard, hier ist der Schuldige: http://www.careerjet.co.uk/devel/Services_Careerjet.zip vor 15 Jahren 1
Die einzige Windows-Maschine, die ich testen musste, war eine Windows 7-Maschine, die keine Probleme beim Öffnen und Extrahieren der Datei mit dem Explorer hatte. vor 15 Jahren 0
Hagel Windows 7! vor 15 Jahren 0
benutze gzip. afaik .. es hat kein problem mit windows extractor. vor 15 Jahren 0
Am Ende verwende ich ein anderes Format als zip * (wie 7zip, rar usw.) * - so dass Benutzer nicht versuchen würden, das mit dem eingebauten fehlerhaften Entpacken zu öffnen. Hi-Angel vor 9 Jahren 0

8 Antworten auf die Frage

23
Igor Fobia

Versuche es mit:

zip -9 -y -r -q file.zip folder/ 
  • -9 Gibt die langsamste Komprimierungsgeschwindigkeit an (optimale Komprimierung, ignoriert die Suffixliste)
  • -y Speichern Sie symbolische Links als solche im ZIP-Archiv, anstatt die Datei, auf die der Link verweist, zu komprimieren und zu speichern
  • -r Durchlaufen Sie die Verzeichnisstruktur rekursiv
  • -q Ruhemodus
11
Bruce McLeod

7zip ist ein Open Source-Komprimierungsprogramm, das unter Linux, FreeBSD, Mac OS X, BeOS, DOS, Amiga und Windows funktioniert.

Ich würde es aufgrund der Windows-Version wärmstens empfehlen.

Es unterstützt

Ein- und Auspacken: 7z, ZIP, GZIP, BZIP2 und TAR

Auspacken nur: ARJ, CAB, CHM, CPIO, DEB, DMG, HFS, ISO, LZH, LZMA, MSI, NSIS, RAR, RPM, UDF, WIM, XAR und Z.

Ich empfehle, kein weiteres proprietäres Tool von Drittanbietern für dieses unglaublich verbreitete Dienstprogramm (zip a file) zu verwenden, das jetzt auf allen Plattformen verfügbar ist. Rick O'Shea vor 7 Jahren 6
8
MSalters

zip -ZLegt die Komprimierungsoption fest. -Z storeist das Trivialste, da es überhaupt nicht komprimiert wird. Dies ist nützlich, wenn Sie zipalternativ dazu taroder bei der Fehlerbehebung verwenden. In diesem Fall sollten Sie prüfen, ob ein nicht komprimiertes Archiv von Windows verwendet werden kann. Wenn das ist verwendbar, wissen Sie, dass Sie eine Nicht-Standard - Komprimierungsoption wählen müssen.

super, ich denke mal, es ist auch der Kompressionsalgorithmus, der Probleme verursacht ... vor 15 Jahren 0
6
Dan Rosenstark

Das einzige, was relevant erscheint, ist dies

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

aber lesen Sie "man zip" auf Ihrem System, bevor Sie woanders hin gehen ...

Hallo. Thx für den Vorschlag, aber diese Option -k bringt mich etwas zu viel zurück. Es wandelt alle Dateinamen in eine 8-stellige / keine Fallversion um :( vor 15 Jahren 0
Ja, ich erinnere mich an diese Tage. Hat die Datei durch das integrierte Zip-Programm unter Windows gelesen? vor 15 Jahren 0
Weiß nicht Dieses Problem mit dem Dateinamen hinderte mich daran vor 15 Jahren 0
Meine Vermutung ist, dass es die Kompression ist, wie MSalters sagt ... vor 15 Jahren 0
4
Shakus

Zusätzlich zu dem, was andere vorgeschlagen haben, ist es wichtig, auf Ihre Datei- und Verzeichnisnamen zu achten, da Windows den Pfad und die Namen der Linux-Dateien nicht unbedingt mag. Es entgeht ihnen manchmal auch beim Zippen anders. Beispiele sind zahlreiche, vor allem Punktdateien (. Und ..), Dateien mit nur Fallunterschieden (name.txt und NAME.txt), absolute Dateipfade (/tmp/file.txt) . Einige andere Zeichen, die in Dateinamen unter Windows zulässig sind, können Probleme verursachen, wenn Windows Explorer zum Öffnen von Dateien verwendet wird. In meinem Fall war der Charakter ":" der Dealbreaker, aber es hat viel Arbeit gekostet, dies herauszufinden.

Bevor Sie die Verwendung vieler Parameter fortsetzen, sollten Sie eine einfache Prozedur befolgen:

  1. Suchen Sie den Ordner oder die Datei, in der Sie Ihre Dateien komprimieren möchten.

  2. Führen Sie Folgendes aus : zip -9 -r -k zip-modified-names.zip / path / in Ihren / Ordner

  3. Achten Sie darauf, was die Konsole ausspuckt. In meinem Fall wurden ':' in Dateinamen entfernt.
  4. Verschieben Sie die ZIP-Datei auf einen Windows-Computer und versuchen Sie, sie zu öffnen.

Wenn dies funktioniert, sollten Sie möglicherweise die Zeichen entfernen, die mit der Option -k aus den Datei- / Verzeichnisnamen entfernt wurden. Versuchen Sie, das Zippen normal durchzuführen. Beachten Sie, dass einige Parameter wie -k Nebenwirkungen haben. In diesem Fall widerspricht -k der Option -q (für Sym-Links).

Außerdem kann die Option -k Ihre Dateinamen unlesbar machen. In meinem Fall wurden meine Dateien nach der Erstellungszeit benannt (z. B. 10: 55: 39.pdf), um das Auffinden des erforderlichen Datensatzes aus den Archiven zu erleichtern. Mit der Option -k wurde die Option 105539.pdf jedoch für Benutzer nicht leicht lesbar. Daher habe ich die Namen in 10_55_39.pdf geändert, das unter Windows ohne die Option -k geöffnet wird, aber immer noch lesbar ist.

@ TD.512 Hast du bemerkt, dass die 6 Jahre alte Frage immer noch keine eindeutige Antwort hat? Fügen Sie am besten eine weitere Antwort hinzu, wenn die Antwort jemandem als anderen zu helfen scheint. Hi-Angel vor 9 Jahren 1
3
Nicholas Hardy

Hatte kürzlich ein ähnliches Problem mit Dateien, die aus einem Perl-Skript erstellt wurden. Es wurde festgestellt, dass die native Windows-Zip-Datei (nur Windows 7 getestet) Pfade mit einem führenden Schrägstrich falsch verarbeitet und eine leere Zip-Datei anzeigt. Die Lösung bestand darin, den führenden Schrägstrich zu entfernen, bevor Dateien hinzugefügt wurden. Möglicherweise speichern einige Versionen des Linux-ZIP-Befehls Dateipfade mit führenden Schrägstrichen.

Laut der App. Hinweise zur pkware-Site (http://www.pkware.com/support/zip-app-note/archives): "Name der Datei mit optionalem relativen Pfad. Der gespeicherte Pfad sollte keinen Laufwerks- oder Gerätebuchstaben enthalten oder ein führender Schrägstrich. " EKW vor 11 Jahren 2
1
luc

Hier ist ein Python-Skript, mit dem ich einige Dateien komprimiere. Es wurde auf Ubuntu und Vista getestet. Ein auf Ubuntu generierter Reißverschluss wird mit dem Vista-Reißverschluss geöffnet.

Ich denke, ich hatte in der Vergangenheit ein ähnliches Problem und das ZIP-Format war nicht ZIP_DEFLATED. Ich bin mir nicht sicher. Ich werde das überprüfen.

Ich hoffe, es hilft

zip-Datei importieren importieren Sie glob, os, sys  Klasse ZipArchive:  def zip_it (self, dirName, Dateien): dirNamePrefix = dirName + "/ *" für Dateiname in glob.glob (dirNamePrefix): Wenn os.path.isfile (Dateiname) und (nicht self.exclude_svn oder (Dateiname.find (". svn \\") == - 1)): Dateiname drucken name = Dateiname [len (self.folder) +1:] self.archive.write (Dateiname, Name, zipfile.ZIP_DEFLATED)  def run (self, ordner, name, exclude_svn): self.exclude_svn = exclude_svn self.folder = Ordner self.archive = zipfile.ZipFile (Name + ". zip", "w") os.path.walk (self.folder, ZipArchive.zip_it, self) self.archive.close ()  wenn __name__ == "__main__": if (len (sys.argv) == 1): print "use zipit ordner [name] [svn: ja | nein]" sonst: 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.run (sys.argv [1], name, exclude_svn) "Fertig" drucken  
Die Frage ist, kann es mit dem Windows-Zip-Mechanismus entpackt werden? vor 15 Jahren 0
Ja. Ich habe es mit dem Vista-Zip-Tool geöffnet. Ich hoffe es funktioniert auch für dich vor 15 Jahren 0
0
Luis Andrés García

Möglicherweise liegt ein Problem bei der Dateiübertragung von Linux auf Windows vor. Wenn Sie FTP verwenden, versuchen Sie, eine binäre Übertragung einzustellen (bin-Befehl in Windows, bevor Sie Ihre Dateien von Linux auf Windows übertragen).