So erstellen Sie eine ZIP-Datei, die mit Windows unter Linux kompatibel ist

Ich muss eine Zip-Datei für alle meine Windows-Benutzer verfügbar machen, also habe ich naiv eine Zip-Datei mit dem Unix-Zip-Befehl erstellt (nennen wir es madeinlinux.Zip).

Es wird erfolgreich mit WinRAR oder Winzip geöffnet, aber bei meinen Benutzern, die die Standard-Windows-Zip-Dateibehandlung verwenden, tritt beim Versuch, sie zu entpacken, ein Fehler auf. (Windows XP)

Ich habe dieselben Daten mit Windows-integrierten ZIP-Dateien komprimiert, und aus Linux - Sicht kann ich keine sehen unterschied im Dateityp:

$ 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 Spezifisches für eine Windows-kompatible ZIP-Datei sein.

Weiß jemand was?

Author: studiohack, 2009-07-10

8 answers

Versuche es mit:

zip -9 -y -r -q file.zip folder/
  • -9 Gibt die langsamste Komprimierungsgeschwindigkeit an (optimale Komprimierung, ignoriert die Suffix-Liste)
  • -y Speichern Sie symbolische Links als solche im ZIP-Archiv, anstatt die Datei zu komprimieren und zu speichern, auf die der Link verweist
  • -r Bewegen Sie die Verzeichnisstruktur rekursiv
  • -q Leiser Modus
 33
Author: Igor Fobia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2011-11-26 19:12:26

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

Ich würde es basierend auf der Windows-Version sehr empfehlen.

Es unterstützt

Verpackung / Entpacken: 7z, ZIP, GZIP, BZIP2 und TAR

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

 12
Author: Bruce McLeod,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-06-12 13:48:39

Das einzige, was relevant aussieht, ist dieses

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

 8
Author: Dan Rosenstark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2009-07-10 11:15:08

zip -Z legt die Komprimierungsoption fest. -Z store ist das trivialste, da es überhaupt nicht komprimiert wird. Dies ist nützlich, wenn Sie zip als Alternative für tar oder bei der Fehlerbehebung verwenden. In diesem Fall sollten Sie versuchen zu sehen, ob ein unkomprimiertes Archiv von Windows aus verwendbar ist. Wenn verwendbar ist, wissen Sie, dass Sie eine nicht standardmäßige Komprimierungsoption auswählen müssen.

 8
Author: MSalters,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2009-07-10 13:29:01

Zusätzlich zu dem, was andere vorgeschlagen haben, Es ist wichtig, auf Ihre Datei-und Verzeichnisnamen zu achten da Windows Linux-Dateipfad und-namen nicht unbedingt mag. Es entgeht ihnen manchmal auch anders beim Zippen. Beispiele sind zahlreich, aber am wichtigsten dot-Dateien (. und ..), Dateien mit nur groß-und Kleinschreibung (name.txt und NAMEN.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 ':' Charakter war der Deal Breaker, aber es hat viel Arbeit gekostet, dies herauszufinden.

Bevor Sie also mit vielen Parametern fortfahren, empfehle ich Ihnen, eine einfache Prozedur zu befolgen:

  1. Suchen Sie den Ordner oder Datei Ihre Zipping up.

  2. Ausführung: zip -9 -r -k-zip-modified-Namen.zip /path/to/your/folder

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

Wenn dies funktioniert, ist es möglicherweise besser, die Zeichen, die mit der Option-k entfernt wurden, aus Ihren Datei - /Verzeichnisnamen zu entfernen, als normal zu zippen. Beachten Sie, dass einige Parameter wie-k Nebenwirkungen haben. In diesem Fall widerspricht-k der Option-q (für Sym-Links).

Auch-k Option kann Ihre Dateinamen unlesbar machen. In meinem Fall wurden meine Dateien basierend auf benannt erstellungszeit (z. B. 10: 55: 39.pdf), um das einfache Auffinden des erforderlichen Datensatzes aus Archiven zu erleichtern, aber-k Option drehte es auf 105539.pdf, das von Benutzern nicht leicht lesbar ist. Ich habe daher die Namen in 10_55_39 geändert.pdf, das unter Windows geöffnet wird, ohne die Option-k zu verwenden, aber immer noch lesbar ist.

 4
Author: Shakus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-06-19 05:50:23

Hatte kürzlich ein ähnliches Problem mit Dateien, die aus einem Perl-Skript erstellt wurden. Es wurde festgestellt, dass native Windows zip (nur Windows 7 getestet) Pfade mit einem führenden Schrägstrich falsch behandelt und eine leere Zipfile anzeigt. Die Lösung bestand darin, den führenden Schrägstrich vor dem Hinzufügen von Dateien zu entfernen. Vielleicht speichern einige Versionen des Linux zip-Befehls Dateipfade mit führenden Schrägstrichen.

 3
Author: Nicholas Hardy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-04-24 04:37:37

Hier ist ein Python-Skript, mit dem ich einige Dateien komprimieren kann. Es wurde auf Ubuntu und Vista getestet. Eine unter Ubuntu generierte Zip-Datei wird mit dem Vista-Reißverschluss geöffnet.

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

Ich hoffe, es hilft

import zipfile
import glob, os, sys

class ZipArchive:

    def zip_it(self, dirName, files):
        dirNamePrefix = dirName+"/*"
        for filename in glob.glob(dirNamePrefix):
            if os.path.isfile(filename) and (not self.exclude_svn or (filename.find(".svn\\")==-1)):
                print filename
                name = filename[len(self.folder)+1:]
                self.archive.write(filename, name, zipfile.ZIP_DEFLATED)

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

if __name__ == "__main__":
    if (len(sys.argv)==1):
        print "usage zipit folder [name] [svn:yes|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.run(sys.argv[1], name, exclude_svn)
        print "done"

 2
Author: luc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2009-07-10 12:03:01

Es gibt wahrscheinlich ein Problem bei der Dateiübertragung von Linux auf Windows. Wenn Sie FTP verwenden, versuchen Sie, eine binäre Übertragung (bin-Befehl in Windows, vor der Übertragung Ihrer Dateien von Linux auf Windows).

 0
Author: Luis Andrés García,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-12-21 10:46:30