Komprimieren Sie Zip-Dateien mit höherer Komprimierung

10

Ich habe eine große Anzahl von Zip-Dateien, die mit dem Befehl zip komprimiert wurden. Ich möchte sie mit dem Flag -9 erneut komprimieren, um das Komprimierungsverhältnis zu verbessern. Weiß jemand, ob dies ohne manuelles Dekomprimieren und anschließendes Komprimieren möglich ist?

PS. Ich muss sie als Zip-Dateien behalten, da sie Windows-Benutzern bereitgestellt werden (und als solche Leerzeichen in ihren Namen haben).

Smartelf
quelle
Eine erneute Komprimierung ist nur durch Dekomprimieren der Datei und erneutes Komprimieren möglich. es ist algorithmisch abhängig. Sie können auch bzip2 oder noch besser xz ausprobieren.
Tipp: Dies kann auch mit XLSX- oder XLSM-Excel-Dateien durchgeführt werden, da es sich tatsächlich um ZIP-Dateien handelt, die XMLs und andere Inhalte enthalten.
Cristian Ciupitu

Antworten:

10

Sie können das Komprimierungsverhältnis nicht verbessern, ohne die Daten zu dekomprimieren. Sie müssen nicht alle Zip-Dateien extrahieren, bevor Sie sie komprimieren. Ich würde jedoch empfehlen, eine ganze Zip-Datei vor dem erneuten Komprimieren zu dekomprimieren.

Es ist möglich, die Dateien in einer Zip-Datei einzeln erneut zu komprimieren und erneut hinzuzufügen, bevor Sie zur nächsten in der Zip-Datei enthaltenen Datei wechseln. Dies erfordert N Umschreibungen der Zip-Datei für eine Zip-Datei, die N Dateien enthält. Es ist viel effizienter, die N Dateien zu extrahieren und die neue Zip-Datei auf einmal zu generieren, wobei alle Dateien mit komprimiert werden -9.

Anthon
quelle
1
Mein Ziel ist es nicht, eine Dekomprimierung zu vermeiden, sondern die Archivstruktur gleich zu halten. und keine Dateimetadaten zu ändern.
Smartelf
1
@ Smartelf Ich glaube nicht, dass Sie eine Dekompression vermeiden können. Ihre anderen Anforderungen sind möglich, es gibt keinen Grund, warum sich Daten ändern müssten.
Terdon
2
@Smartelf wie ich bereits angedeutet habe, musst du ** neu komprimieren **. Das Zuweisen derselben Dateimetadaten sollte kein Problem sein, wenn Sie dies beispielsweise mit einem Python-Programm und seinem Zip-Modul tun. Mit unzip/ zipHalten der Metadaten ist die gleiche wahrscheinlich schwieriger.
Anthon
5

Es gibt ein Dienstprogramm namens AdvanceCOMP , das genau das tut, wonach Sie suchen. Es komprimiert ZIP- und GZ-Dateien (und einige andere) ohne Zwischenextraktion auf die Festplatte. (Ich glaube, dass der verwendete Mechanismus darin besteht, die Daten zu dekomprimieren und erneut zu komprimieren, aber dafür müssen keine Dateien auf die Festplatte geschrieben oder Metadaten neu generiert werden.)

gaelicWizard
quelle