2012-11-09 39 views
7

我想壓縮包含4個大文件的文件夾的內容,非常非常相似。所以我希望減小尺寸。拉鍊癟0%?爲什麼不壓縮?

下面是我使用的Linux/Fedora的命令:

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

我得到的迴應:

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

然後我得到的存檔,這是大約大小爲我原來的一樣夾。

似乎根本沒有壓縮發生。爲什麼?

+0

當你省略'-P mypassword'時會發生什麼? –

+2

並非所有數據都可以壓縮。 –

+0

當我省略-P mypassword時,它是一樣的。 –

回答

7

不像tar + gzipzip採用了新的壓縮表中的每個文件,這樣即使四個文件是相同的,它會嘗試單獨壓縮每個。

技術上,tar也看到每個文件,但它一起絃樂器他們進入一個漫長輸入gzip,所以壓縮步驟適用於一個巨大的輸入這就是爲什麼tar + gzip通常會產生比zip更小的結果。

問題是爲什麼你的exe文件無法壓縮。 exe文件通常包含大量容易壓縮的數據,因此它們應縮小(「放氣」)至少30%。也許這些文件被加密或混淆;這些過程使結果難以壓縮。

+0

謝謝,這是有道理的,如果壓縮單獨壓縮每個文件。這些文件是可自解壓的exe文件,它們包含一個小的可執行文件+一個大的壓縮的dll文件庫+一些圖片。圖像和庫已經被壓縮並且對於每個文件幾乎相同。 –

2

某些文件不能被壓縮,特別是如果它們的熵很高。當字節的統計分佈是偶數時(例如,當字節0出現的頻率與字節1一樣多時,會發生這種情況)。這發生在已經壓縮的內容上。一些視頻或音頻格式屬於該類別。

+0

我認爲每個文件都有很高的熵值,但它們非常相似。兩個給定文件之間的差異可能小於1%。所以考慮整個文件夾時有很多冗餘。 –

+0

「放氣0%」是什麼意思?我忘了在原帖中提問。謝謝你的幫助。 –

2

亞倫是對的。根據WikipediaZIP格式在存檔之前會進行壓縮,因此不同文件之間的相似性不利於壓縮。

你真的想壓縮.exe文件嗎?不知何故,我懷疑這是你的實際文件類型。

請參閱http://en.wikipedia.org/wiki/ZIP_(file_format)#Advantages_and_disadvantages

+0

感謝您的意見和鏈接。是的,我的文件是可自解壓的exe文件(請參閱我對Aaron的回覆)。謝謝你的時間! –

2

癟了0%表示它試圖壓縮,但實際上沒有壓縮。如上所述,zip格式不能利用不同條目之間的相似性。 tar + gzip可以,但即使如此,只要相似性最終相距不到32K字節。其他格式可以利用更長的距離相似性,如xz。

是正常的未壓縮的可執行文件由30%壓縮到50%,這意味着你的可執行文件或a)由類似UPX壓縮,b)中它們是自解壓的壓縮數據,其中,所述解壓縮器預先存儲的壓縮數據,c)它們是非常短的可執行文件,具有大量的壓縮數據,或者d)它們大多被加密。

相關問題