2012-11-09 9 views
7

Ich versuche den Inhalt eines Ordners zu komprimieren, der 4 große Dateien enthält, sehr, sehr ähnlich. Also erwarte ich, dass die Größe reduziert wird.zip entleert 0%? Warum keine Kompression?

Hier ist der Befehl, den ich bin mit auf Linux /:

adding: myfolder/ (stored 0%) 
adding: myfolder/Program1.exe (deflated 0%) 
adding: myfolder/Program2.exe (deflated 0%) 
adding: myfolder/Program3.exe (deflated 0%) 
adding: myfolder/Program4.exe (deflated 0%) 

Dann habe ich das Archiv, das ca. die gleiche Größe wie mein Original:

zip -9 myarchive.zip -r myfolder -P mypassword 

ich die Antwort bekommen Mappe.

Es scheint, dass überhaupt keine Komprimierung auftritt. Warum?

+0

Was passiert, wenn Sie '-P mypassword' weglassen? –

+2

Nicht alle Daten konnten komprimiert werden. –

+0

ist es dasselbe, wenn ich -P mypassword weglasse. –

Antwort

7

Im Gegensatz zu tar + gzip verwendet zip eine neue Kompressionstabelle für jede Datei, so dass selbst wenn die vier Dateien identisch waren, würde es versuchen, jeweils einzeln zu komprimieren.

Technisch tar sieht auch jede Datei, aber es reiht sich zusammen in einen langen Eingang für gzip, so dass der Kompressionsschritt auf einem großen Eingang funktioniert, weshalb tar + gzip in die Regel ein geringeres Ergebnis als zip ergibt.

Die Frage ist, warum Ihre exe Dateien nicht komprimiert werden können. exe Dateien enthalten normalerweise große Mengen leicht komprimierbarer Daten, daher sollten sie um mindestens 30% kleiner werden ("deflate"). Vielleicht sind die Dateien verschlüsselt oder verschleiert; Diese Prozesse machen das Ergebnis schwer zu komprimieren.

+0

Danke, das macht dann Sinn, wenn zip jede Datei einzeln komprimiert. Die Dateien sind selbst extrahierbare exe, sie enthalten eine kleine ausführbare Datei + eine große gezippte Bibliothek von DLL-Dateien + einige Bilder. Bilder und Bibliotheken sind bereits komprimiert und für jede Datei fast identisch. –

2

Einige Dateien können nicht komprimiert werden, insbesondere wenn ihre Entropie hoch ist. Dies geschieht, wenn die statistische Verteilung der Bytes gerade ist (z. B. wenn Byte 0 so oft wie Byte 1 als Byte 2 erscheint ...). Dies geschieht bei bereits komprimierten Inhalten. Einige Video- oder Audioformate fallen in diese Kategorie.

+0

Ich denke, jede Datei hat eine hohe Entropie, aber sie sind sehr ähnlich. Es gibt wahrscheinlich weniger als 1% Unterschied zwischen zwei gegebenen Dateien. Es gibt also eine Menge Redundanz bei der Betrachtung des gesamten Ordners. –

+0

Und was bedeutet "deflationiert 0%"? Ich habe vergessen, das im ursprünglichen Post zu fragen. Danke für Ihre Hilfe. –

2

Aaron hat Recht. Laut Wikipedia komprimiert das Format ZIP vor der Archivierung, so dass Ähnlichkeiten zwischen verschiedenen Dateien die Komprimierung nicht unterstützen.

Möchten Sie wirklich .exe Dateien komprimieren? Irgendwie bezweifle ich, dass das dein Dateityp ist.

Siehe http://en.wikipedia.org/wiki/ZIP_(file_format)#Advantages_and_disadvantages.

+0

Danke für Ihre Eingabe und für den Link. Ja, meine Dateien sind selbst extrahierbare exe-Dateien (siehe meine Antwort an Aaron). Vielen Dank für Ihre Zeit! –

2

Deflationiert 0% bedeutet, dass es versuchte, zu komprimieren, aber effektiv keine Komprimierung. Wie bereits erwähnt, kann das Zip-Format die Ähnlichkeit zwischen verschiedenen Einträgen nicht ausnutzen. tar + gzip kann, aber auch dann nur, wenn die Ähnlichkeiten weniger als 32K Bytes voneinander entfernt sind. Andere Formate können längere Distanzähnlichkeiten ausnutzen, z. B. xz.

Es ist normal für unkomprimierte ausführbare Dateien um 30% bis 50% zu komprimieren, was bedeutet, dass Ihre ausführbaren Dateien entweder a) durch etwas wie UPX komprimiert sind, b) sie sind selbstextrahierende komprimierte Daten, wo der Dekompressor gespeichert wird der komprimierten Daten, c) sie sind sehr kurze ausführbare Dateien mit vielen komprimierten Daten, oder d) sie sind meist verschlüsselt.