In den letzten Monaten habe ich wöchentlich mehrere Datenordner in Zip-Dateien kopiert. Jetzt möchte ich diese ZIP-Dateien in einer ZIP-Datei zusammenfassen, 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 enthalten ist, möchte ich, dass die neueste Version in der neu erstellten ZIP-Datei enthalten ist. Wenn eine Datei nur in einer vorhandenen Zip-Datei erscheint, möchte ich sie natürlich auch in der endgültigen Zip-Datei haben.
Ich versuche zu vermeiden, sie einzeln in einen Arbeitsordner entpacken zu müssen, Daten aus älteren ZIP-Dateien mit Daten aus neueren ZIP-Dateien zu überschreiben und dann alles in eine neue ZIP-Datei zu packen.
Soweit ich weiß, würde pkzip die ZIP-Dateien selbst kombinieren. Gibt es jedoch eine zuverlässige und schnelle kostenlose Methode, über die mir jemand etwas sagen kann?
Antworten:
Sie werden es nicht mögen, aber: Entpacken Sie alles in der richtigen Reihenfolge in einen Arbeitsordner. Dann ist das Komprimieren des Ergebnisses der effektivste Weg.
Andernfalls entstehen viele verschwendete CPU-Zyklen:
.zip-Datei, indem Sie eine Datei in der Mitte aktualisieren), und die gesamte Datei muss neu geschrieben werden
Also, imho benutze einfach ' unzip ' wiseley:
Die Reihenfolge des Entpackens ist wichtig, ich kenne das Muster Ihrer Zip-Namen nicht, aber ich würde die neueste Zip-Datei zuerst extrahieren. Die Option '-u' zum Entpacken überschreibt nur Dateien, wenn sie neuer sind, oder erstellt Dateien, wenn nicht schon da. Infolgedessen entpacken Sie nur die neuesten Dateien und komprimieren das Ergebnis nur einmal.
quelle
zipmerge
Dienstprogramm führt z. B. ZIP-Archive zusammen, ohne sie zu dekomprimieren und erneut zu komprimieren.unzipping
/zipping
und nichtuncompress / decompress
. Ja, natürlich kann man einen Eintrag von2.zip
(dem komprimierten Blob) nehmen und in übertragenfirst.zip
und somit muss keine "Komprimierung" stattfinden. Aber Sie müssen den Blob extrahieren2.zip
, das Vorhandensein im Inhaltsverzeichnis von nachschlagenfirst.zip
, wenn es entweder den vorhandenen Eintrag ersetzt (was bedeutet, dass Sie die gesamte Datei im Grunde neu schreiben müssen) oder am Ende anfügt - und danach müssen Sie hänge den toc des zip an. Ich verstehe nicht, wiezipmerge
man das Zusammenführen von Zip-Einträgen auf eine andere Art und Weise erreichen kann (Komprimierung beiseite)every file [...] has to be unzipped and then zipped again
- nein, das ist deine Lösung.in '2.zip' exists a file 'foobar.txt' and in '3.zip' exists another file 'foobar.txt'. merging it the way you want to merge it leads to 'compress it X times'
- Nein, tut es nicht. Warum sollte es?you add more content [...] and the whole file has to be rewritten
- nein, Sie schreiben die Ausgabe in einem Durchgang. Warum hat das jemand positiv bewertet?Verwenden Sie einfach die Option -g von ZIP, mit der Sie eine beliebige Anzahl von ZIP-Dateien anhängen können (ohne die alten zu extrahieren). Dies spart Ihnen viel Zeit.
Schauen Sie sich auch zipmerge an
quelle
-g
Fügt Dateien zu einer vorhandenen Zip-Datei hinzu. es verschmilzt sie nicht. Beispiel: Fügtzip -g result.zip other.zip
die Dateiother.zip
in result.zip.
--grow ein. Vergrößert das angegebene ZIP-Archiv ( hängt es an dieses an), anstatt ein neues zu erstellen. Wenn dieser Vorgang fehlschlägt, versucht zip, das Archiv in seinem ursprünglichen Zustand wiederherzustellen. Wenn die Wiederherstellung fehlschlägt, kann das Archiv beschädigt werden. Diese Option wird ignoriert, wenn kein Archiv vorhanden ist oder wenn mindestens ein Archivmitglied aktualisiert oder gelöscht werden muss.`Möglicherweise ist es nicht das, wonach Sie suchen, aber das kostenlose Ant-Build-Tool bietet die Möglichkeit, Zip-Dateien zusammenzuführen.
https://ant.apache.org/manual/Tasks/zip.html
quelle
https://linux.die.net/man/1/zipmerge :
quelle
Ich dachte, Sie könnten die zu extrahierenden Dateien in ein temporäres Verzeichnis schreiben.
Es gibt ein Problem mit dieser Befehlszeile. Ich habe keine Möglichkeit gefunden, das Entpacken von Archiven zu bestellen, sodass ein älteres Archiv möglicherweise ein neueres Archiv überschreibt. Dieses Problem kann durch die Verwendung eines Entpackers behoben werden, der über eine Befehlszeilenoption verfügt, mit der nur überschrieben werden kann, wenn eine neuere Version vorliegt. Ich verwende hauptsächlich 7-Zip, das keine solche Befehlszeilenoption hat.
Für diesen Befehl müssen sich alle ZIP-Dateien im selben Verzeichnis befinden. Kein Problem, wenn alle Reißverschlüsse eindeutige Namen haben. Der Befehl kann jedoch 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 und ein anderes Dekomprimierungsprogramm zu verwenden, ersetzen
"c:\program files\7-zip\7z" x %f -oc:\testdir -r -aoa
Sie es einfach durch den Befehl, den Sie für jede Datei ausführen würden. Verwenden Sie%f
als Platzhalter den Namen der Datei, die Sie entpacken möchten.Ich habe versucht, eine polierte App zu suchen, kostenlos oder auf andere Weise und habe keine wirklich gefunden.
Hoffentlich erhalten Sie einen guten Start, und WinZip oder ähnliches kann das Überschreibproblem beheben.
Viel Glück.
quelle
Wenn ich mich richtig erinnere, pkzip ein Kommandozeilenprogramm.
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 geben.
quelle
Suchen Sie im Internet nach der winzip-Befehlszeile. Winzip verfügt über mehrere Versionen von Befehlszeilenprogrammen, die auf die von Ihnen möglicherweise installierte Version von Winzip passen. Das Befehlszeilentool WZZIP verfügt über die Option -f "Aktualisieren", mit der neuere Dateien nur komprimiert werden, wenn sie dem Namen einer Datei in der komprimierten Summierungsausgabedatei entsprechen.
Verwenden Sie WZunzip, das wie oben gezeigt in eine FOR-Anweisung eingeschlossen ist, um eine Datei in ein Verzeichnis zu entpacken, und dann WZzip -f, um diese Dateien zu einer Ausgabesummierungs-Zip-Datei hinzuzufügen. Anschließend wird die FOR-Schleife wiederholt, um die nächste Eingabedatei zu bearbeiten und in die einzige Summierungsausgabedatei auszugeben. Die Reihenfolge der Eingabedateien spielt keine Rolle, da WZzip -f nur dann zur Ausgabedatei hinzugefügt wird, wenn die Eingabedaten neuer sind als die bereits in der Ausgabedatei enthaltenen. 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 tun.
quelle