Wie entpacke ich eine mehrteilige (überspannte) ZIP-Datei unter Linux?


74

Ich muss eine 400-MB-Datei auf meinen Webserver hochladen, bin jedoch auf 200-MB-Uploads beschränkt. Mein Host schlug vor, ein übergreifendes Archiv zu verwenden, was ich unter Linux noch nie getan habe.

Ich habe einen Test in einem eigenen Ordner, eine PDF - Datei in zipping up test.zip.001, .002und .003. Wie entpacke ich es? Muss ich mich ihnen zuerst anschließen?

Bitte beachten Sie, dass ich 7z genauso gerne verwende wie ZIP-Formate. Wenn dies einen Unterschied zum Ergebnis macht.


Dies mag auf einem Webserver mit eingeschränkter Software nicht hilfreich sein, aber ich habe diese Lösung nirgendwo anders gesehen und es ist das, was ich verwende: Die java.util.zip-API hat sich mit allen ZIP-Teilen befasst, die ich darauf geworfen habe auch im allgemeineren Fall, dass keine nachlaufenden Teile vorhanden sind oder der letzte Teil unvollständig ist. Ich rufe es von Jython aus auf, es hat also die Form eines Skripts, und hier ist der Code: github.com/combatopera/unzipparts
Andrzej Cichocki

Antworten:


75

Sie müssen sich ihnen zuerst anschließen. Sie können die allgemeine Linux-App catwie im folgenden Beispiel verwenden:

cat test.zip* > ~/test.zip

Dadurch werden alle Ihre verketten test.zip.001, test.zip.002etc - Dateien in eine größere, test.zip Datei. Sobald Sie diese einzelne Datei haben, können Sie ausführenunzip test.zip

"So erstellen, teilen, verbinden und extrahieren Sie Zip-Archive unter Linux" kann hilfreich sein.


1
OK, das gefällt mir ... Fortschritt ... Aber ich bin wirklich ein Linux n00b hier. Ich nehme an, x*ist der Dateiname? Und ~/hugefileist ein Verzeichnis? Was ist der Zweck des Tildesymbols? Tut mir leid zu fragen, was ich vermute, sind sehr grundlegende Fragen.
Tim

Wenn Sie die Dateien aufteilen, sollten Sie ein Präfix wie x_ (z. B .: x_split1, x_split2, ...; wie die Windows-Suffixe file.001, file.002 ... usw.) verwenden. Die Tilde repräsentiert Ihr Ausgangsverzeichnis. ~ / hugefile ist dasselbe wie / home / tim / hugefile. Hast du deine Dateien aufgeteilt? Wie heißen die aufgeteilten Dateien?
fromnaboo

1
Ich glaube , ich sehe , wo die Frage kommen wird, das Spanned Archiv in Windows erstellt wurde, 7zip mit einer ZIP - Erweiterung verwenden, so dass es automatisch erstellt wie TEST.zip.001, TEST.zip.002und TEST.zip.003was bedeutet die Spaltung ist sehr unterschiedlich. Es fängt an, so auszusehen, als wäre es möglicherweise einfacher, Linux auf eine VMWare zu werfen und die Dateien hier zu erstellen. Dann habe ich es zumindest nur mit 1 Betriebssystem zu tun. Können Sie den Befehl SPLIT für einen beliebigen Dateityp verwenden? dh Bilder, Audio-Filme usw.?
Tim

Ja, der Befehl split funktioniert für jede Datei. installiere p7zip mit apt-get installiere p7zip unter debian oder yum installiere p7zip unter fedora, verbinde die dateien mit: cat TEST.zip. *> archiviere und extrahiere sie mit.
fromnaboo

1
7za x archiveist wahrscheinlich besser, wenn das Archiv eine Verzeichnisstruktur enthält.
SLM

38

Das Linux- unzipDienstprogramm unterstützt keine mehrteiligen Reißverschlüsse. Aus dem Handbuch :

Mehrteilige Archive werden noch nicht unterstützt, außer in Verbindung mit zip. (Alle Teile müssen der Reihe nach miteinander verkettet werden. Anschließend muss zip -F (für zip 2.x) oder zip -FF(für zip 3.x) eine Operation für das verkettete Archiv ausgeführt werden, um es zu „reparieren“. Außerdem können zip 3.0 und höher kombiniert werden mehrteilige (geteilte) Archive in ein kombiniertes Archiv mit nur einer Datei zip -s- inarchive -O outarchive. Weitere Informationen finden Sie in der Handbuchseite zu zip 3. )

Sie müssen also zuerst die Teile verketten und dann das Ergebnis reparieren. cat test.zip.*Verkettet alle aufgerufenen Dateien, test.zip.*wobei der Platzhalter *für eine beliebige Zeichenfolge steht. Die Dateien werden in lexikografischer Reihenfolge aufgelistet, die dank der führenden Nullen der numerischen Reihenfolge entspricht. >test.zipLeitet die Ausgabe in die Datei test.zip.

cat test.zip.* >test.zip
zip -FF test.zip --out test-full.zip
unzip test-full.zip

Wenn Sie die Teile durch direktes Teilen der Zip-Datei erstellt haben, anstatt mit dem offiziellen Pkzip-Dienstprogramm eine mehrteilige Zip-Datei zu erstellen, müssen Sie nur die Teile verbinden.

cat test.zip.* >test.zip
unzip test.zip

1
Der zweite Befehl sollte zip -FF test.zip --out test-full.zip sein - gibt einen Fehler ohne den Befehl --out aus
Alvin

3
Für mich hat der FFAnsatz funktioniert, wenn ich zipauf die erste mehrteilige Datei zeigte, die nicht catbenötigt wird.
Jānis Elmeris

1
Wie bereits bei @ JānisElmeris erwähnt, müssen die Archive vor der Verwendung nicht verkettet werden zip -FF.
René

24
7z x archive.zip.001

Der Rest wird automatisch gefunden


1
Das ist so seltsam ... Damit dies funktioniert, müssen Sie zuerst alle ZIP-Dateien (.zXX und .zip) in .zip.xxx umbenennen (.zip ist der letzte Teil). Dann können Sie 7z x für die erste verwenden , die zu einer verketteten zip "extrahiert", die dann wieder mit unzip, aber nicht mit 7z dekomprimiert werden kann ... Ich bin nicht ganz sicher, ob die Datei korrekt entpackt wurde, aber zumindest diesmal geht unzip nicht auf CRC-Fehler ein. ZIP ist unter Linux so unglaublich kaputt - meide es, wenn du kannst. :(
Energiequant

Zumindest für Centos benötigen wir eine Anleitung zur Installation von 7z
stiv

20

Ich habe die Antwort hier gefunden: https://superuser.com/a/517758/10264

Diese Antwort ähnelt im Konzept der von Gilles , dh Sie kombinieren zuerst das aufgeteilte Archiv mit split zu einem normalen Archiv und entpacken es dann mit unzip.

Der Unterschied besteht darin, dass Sie anstelle des -FFFlags, das bei mir nicht funktioniert hat, zip anweisen, die aufgeteilte Datei ohne Aufteilung neu zu packen. Das -s 0bedeutet die Flagge.

Kombinieren Sie also zunächst das aufgeteilte Archiv zu einem einzigen Archiv:

zip -s 0 split-foo.zip --out unsplit-foo.zip

Dann extrahieren Sie das einzelne Archiv mit unzip:

unzip unsplit-foo.zip

2
Dies ist die richtige Antwort für zip 3.x
texasbruce

0

Nur ein weiteres Beispiel. Dies funktionierte für mich in Bash, um 3 GB Oracle Installer zu teilen:

echo "<installOracleDB.sh>: Splitting OracleDB installer"
zip /tmp/linuxx64_12201_database.zip --out /tmp/linuxx64_12201_oradb.zip -s 1000m
echo "<installOracleDB.sh>: Merging OracleDB installer"
zip -FF /tmp/linuxx64_12201_oradb.zip --out /tmp/linuxx64_12201_database.zip
echo "<installOracleDB.sh>: Removing temporary files OracleDB installer"
find /tmp -type f -name 'linuxx64_12201_oradb*' -exec rm {} +
echo "<installOracleDB.sh>: Unizipping OracleDB installer"
unzip /tmp/linuxx64_12201_database.zip

Dies sieht den vorherigen Antworten sehr ähnlich. Können Sie erklären, was es tut und wie es sich von dem unterscheidet, was bereits gepostet wurde? Bitte antworten Sie nicht in Kommentaren; Bearbeiten Sie Ihre Antwort, um sie klarer und vollständiger zu gestalten.
Scott

Hallo Schotte, ich wünschte, ich könnte in den Kommentaren antworten, aber ich habe zu wenig Punkte, um das jetzt zu tun. Diese Antwort enthält eine vollständige Liste der Befehle zum Teilen, Zusammenführen und Entpacken einer großen Datei unter Unix. Ich werde mehr erläuternden Text bereitstellen, um meine Antwort zu verdeutlichen. Danke für Ihre Antwort.
TheHagueCoder

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.