2012-11-09 18 views
7

Próbuję spakować zawartość folderu zawierającego 4 duże pliki, bardzo, bardzo podobne. Spodziewam się więc zmniejszenia rozmiaru.zip deflated 0%? Dlaczego nie ma kompresji?

Oto polecenie używam na Linux/Fedora:

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

otrzymuję odpowiedź:

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%) 

Potem się archiwum, które jest ok taki sam rozmiar jak moim egzemplarzu teczka.

Wygląda na to, że w ogóle nie występuje kompresja. Czemu?

+0

Co się dzieje, gdy pominiesz '-P mojehasło'? –

+2

Nie wszystkie dane mogą być skompresowane. –

+0

to samo, gdy pomijam -P mojehasło. –

Odpowiedz

7

W przeciwieństwie do tar + gzip, zip używa nowej tabeli kompresji dla każdego pliku, więc nawet jeśli cztery pliki były identyczne, spróbowałoby skompresować je indywidualnie.

Technicznie tar również widzi każdy plik ale struny je razem w jednym długim wejściem do gzip, więc krok kompresja działa na jeden ogromny wkład dlatego tar + gzip zwykle daje mniejszy wynik niż zip.

Pytanie brzmi, dlaczego nie można skompresować plików exe. Pliki exe zwykle zawierają duże ilości łatwo kompresowanych danych, więc powinny się skurczyć ("deflate") o co najmniej 30%. Może pliki są zaszyfrowane lub zaciemnione; te procesy powodują, że wynik jest trudny do skompresowania.

+0

Dzięki, to ma sens, jeśli zip kompresuje indywidualnie każdy plik. Pliki są samowyodrębalne exe, zawierają mały plik wykonywalny + spakowaną bibliotekę bibliotek dll + kilka zdjęć. Obrazy i biblioteki są już skompresowane i są prawie takie same dla każdego pliku. –

2

Niektóre pliki nie mogą być skompresowane, w szczególności jeśli ich entropia jest wysoka. Dzieje się tak, gdy rozkład statystyczny bajtów jest równy (np. Gdy bajt 0 pojawia się tak często jak bajt 1 jako bajt 2 ...). Dzieje się tak w przypadku skompresowanych treści. Niektóre formaty wideo lub audio należą do tej kategorii.

+0

Myślę, że każdy plik ma wysoką entropię, ale są bardzo podobne. Prawdopodobnie różnica między dwoma podanymi plikami wynosi mniej niż 1%. Jest więc dużo nadmiarowości, gdy rozważa się cały folder. –

+0

Co oznacza "deflowany 0%"? Zapomniałem zapytać o to w oryginalnym poście. Dzięki za pomoc. –

2

Aaron ma rację. Zgodnie z Wikipedia, format ZIP kompresuje przed archiwizacją, więc podobieństwa między różnymi plikami nie pomagają w kompresji.

Czy naprawdę chcesz skompresować pliki .exe? Jakoś wątpię, że to twój rzeczywisty typ pliku.

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

+0

Dziękujemy za dane wejściowe i za link. Tak, moje pliki są samowyodrębnialnymi plikami exe (zobacz moją odpowiedź do Aarona). Dziękuję za Twój czas! –

2

Deflated 0% oznacza, że ​​próbował skompresować, ale skutecznie nie kompresji. Jak już wspomniano, format zip nie może wykorzystywać podobieństwa między różnymi wpisami. tar + gzip może, ale nawet wtedy tylko wtedy, gdy podobieństwa kończą się mniej niż 32 kilobajtów od siebie. Inne formaty mogą wykorzystywać większe podobieństwa, takie jak xz.

To normalne, nieskompresowane pliki wykonywalne do kompresji o 30% do 50%, co oznacza, że ​​pliki wykonywalne są albo a) skompresowane przez coś podobnego UPX, b) są samorozpakowujące skompresowanych danych, gdzie dekompresor jest przechowywane w przyszłość ze skompresowanych danych, c) są to bardzo krótkie pliki wykonywalne z dużą ilością skompresowanych danych lub d) są w większości zaszyfrowane.