Wie kombiniere / füge ich ZIP-Dateien zusammen?

In den letzten Monaten habe ich in wöchentlichen Abständen mehrere Datenordner in Zip-Dateien kopiert. Jetzt möchte ich diese Zip-Dateien in einer Zip-Datei kombinieren, da die meisten Inhalte der vorhandenen Zip-Dateien nur unterschiedliche Versionen derselben Datendateien sind.

Wenn also eine Datei in mehr als einer der vorhandenen Zip-Dateien angezeigt wird, möchte ich, dass sich die neueste Version in der neuen ZIP-Datei befindet, die erstellt wird. Wenn eine Datei nur in einer vorhandenen ZIP-Datei angezeigt wird, dann Ich möchte es auch in der endgültigen Zip-Datei.

Ich versuche zu vermeiden, dass ich sie einzeln in einen Arbeitsordner entpacken muss, Daten aus älteren ZIP-Dateien mit Daten aus neueren ZIP-Dateien überschreibe und dann alles in eine neue ZIP-Datei überschneide.

Soweit ich weiß, würde pkzip die ZIP-Dateien selbst kombinieren, aber gibt es eine zuverlässige und schnelle kostenlose Methode, von der mir jemand erzählen kann?

 23
zip
Author: CChriss, 2010-01-08

7 answers

Sie werden es nicht mögen, aber: Entpacken Sie alles in einen Arbeitsordner in der richtigen Reihenfolge, dann ist das Zippen des Ergebnisses der effektivste Weg.

Andernfalls erhalten Sie viele verschwendete CPU-Zyklen:

  • angenommen, Ihr Ergebnis geht an ' first.zip'
  • jede Datei von ' 2.zip', '3.zip ' etc muss entpackt und dann wieder in 'first.zip'
  • in '2.zip' existiert eine Datei 'foobar.txt' und in ' 3.zip 'existiert eine andere Datei' foobar.txt'. es so zusammenführen, wie Sie willst du es zusammenführen führt zu 'komprimieren sie X mal'
  • der toc von a.zip befindet sich am Ende der Datei: Sie fügen mehr Inhalt hinzu (in der Mitte des
    .zip durch Aktualisieren einer Datei in der Mitte) und die gesamte Datei muss neu geschrieben werden

Also, imho benutze einfach 'entpacke ' wiseley:

% mkdir all
% for x in *.zip ; do unzip -d all -o -u $x ; done
% zip -r all.zip all

Die Reihenfolge des Entpackens ist wichtig, ich kenne das Muster Ihrer Zip-Namen nicht, aber ich würde zuerst die neueste Zip-Datei extrahieren, die Option' - u ' zum Entpacken überschreibt nur Dateien, wenn sie sind neuere oder erstellt Dateien, wenn nicht bereits vorhanden. infolgedessen entpacken Sie nur die neuesten Dateien und komprimieren das Ergebnis nur einmal.

 7
Author: akira,
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
2017-12-27 16:10:07

Es ist vielleicht nicht das, wonach Sie suchen, aber das kostenlose Ant-Build-Tool enthält die Möglichkeit, Zipfiles zusammenzuführen.

Https://ant.apache.org/manual/Tasks/zip.html

 5
Author: CarlF,
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
2016-08-09 14:27:40

Verwenden Sie einfach die Option-g von ZIP, mit der Sie eine beliebige Anzahl von ZIP-Dateien an eine anhängen können (ohne die alten zu extrahieren). Dies spart Ihnen viel Zeit.

Schauen Sie sich auch zipmerge

 4
Author: Christos,
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
2013-11-07 17:20:21

Https://linux.die.net/man/1/zipmerge:

Zipmerge führt die Quell-Zip-Archive source-zip in das Ziel-Zip-Archiv target-zip ein. Standardmäßig überschreiben Dateien in den Quell-Zip-Archiven vorhandene gleichnamige Dateien im Ziel-Zip-Archiv.

 3
Author: imz -- Ivan Zakharyaschev,
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
2017-12-29 22:40:38

Ich dachte, Sie könnten die extrahierten Dateien in ein temporäres Verzeichnis schreiben.

Es gibt ein problem mit dieser Befehlszeile. Ich konnte keine Möglichkeit finden, das Entpacken von Archiven anzuordnen, sodass ein älteres Archiv ein neueres Archiv überschreiben kann. Dieses Problem kann durch die Verwendung eines Entpackers behoben werden, der über einen Befehlszeilenschalter verfügt, der nur überschreibt, wenn er neuer ist. Ich benutze hauptsächlich 7-Zip, das keine solche Befehlszeilenoption hat.

Außerdem benötigt dieser Befehl alle ZIP-Dateien, die sich in der gleiches Verzeichnis. Kein Problem, wenn alle Reißverschlüsse eindeutige Namen haben. Das heißt, der Befehl kann an Ihre Situation angepasst werden.

for /f %f in ('dir /b *.zip') do "c:\program files\7-zip\7z" x %f -oc:\testdir -r -aoa

Um dies zu ändern, um ein anderes Entpackungsprogramm zu verwenden, ersetzen Sie einfach "c:\program files\7-zip\7z" x %f -oc:\testdir -r -aoa durch den Befehl, den Sie für jede Datei ausführen würden. Verwenden Sie %f als Platzhalter für den Namen der Datei, die Sie entpacken möchten.

Ich habe versucht, nach einer polierten App zu suchen, kostenlos oder auf andere Weise und habe keine wirklich gefunden.

Hoffentlich gibt dir das einen guten Start und WinZip oder ähnliches kann sich um das Überschreibungsproblem kümmern.

Viel Glück.

 1
Author: Scott McClenning,
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
2010-01-08 07:20:32

Wenn ich mich richtig erinnere, war pkzip ein Befehlszeilenprogramm.

Es gibt immer noch eine Befehlszeilenversion von ZIP, die behauptet, mit pkzip kompatibel zu sein.

, Es heißt Info-ZIP - und es sollte eine version für Ihr Betriebssystem.

 0
Author: pavium,
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
2010-01-08 05:29:41

Suchen Sie im Netz nach der Winzip-Befehlszeile. Winzip verfügt über mehrere Versionen von Befehlszeilentools, die zu jeder Version von Winzip passen, die Sie möglicherweise installiert haben. Das Befehlszeilentool WZZIP verfügt über die Option-f "Auffrischen", mit der neuere Dateien nur von denen komprimiert werden, die dem Namen einer Datei in der Summationsausgabe-Zip-Datei entsprechen.

Verwenden Sie WZunzip wraped in einer FOR-Anweisung wie oben gezeigt, um eine Datei in ein Verzeichnis zu entpacken, und dann WZzip-f, um diese Dateien einer Ausgabe-Summations-Zip-Datei hinzuzufügen. Dann die FOR-Schleife wiederholt, um an der nächsten Eingabedatei zu arbeiten, die in die einzige Summationsausgabedatei ausgegeben werden soll. Die Reihenfolge der Eingabedateien spielt keine Rolle, da WZzip-f der Ausgabedatei nur hinzugefügt wird, wenn die Eingabedaten neuer als die bereits in der Ausgabedatei enthaltenen sind. Alle Dateien, die nicht in der Ausgabedatei vorhanden sind, werden ebenfalls hinzugefügt. Anschließend können Sie das Ergebnis in einen Ordner entpacken und erneut komprimieren, um eine effizient gepackte Ergebnisdatei zu erhalten. Sie können dies sogar automatisch nach der FOR-Schleife am Ende der batch-Datei.

 0
Author: eewiz,
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-08-19 05:59:15