Zip

zip 壓縮時不壓縮文件

  • February 17, 2017

我已經在一個目錄中遞歸地壓縮了一個文件。但是我注意到最後幾個 zip 文件沒有被壓縮。

 adding: 1.3.12.2.1107.5.1.4.64517.30000014091005511462300042406.dcm (deflated 0%)
 adding: 1.3.12.2.1107.5.1.4.64517.30000014091005511462300042279.dcm (deflated 0%)
 adding: 1.3.12.2.1107.5.1.4.64517.30000014091005511462300042466.dcm (deflated 0%)
 adding: 1.3.12.2.1107.5.1.4.64517.30000014091005511462300042200.dcm (deflated 0%)
 adding: 1.3.12.2.1107.5.1.4.64517.30000014091005511462300042227.dcm (deflated 0%)
 adding: 1.3.12.2.1107.5.1.4.64517.30000014091005511462300042372.dcm (deflated 0%)
 adding: 1.3.12.2.1107.5.1.4.64517.30000014091005511462300042245.dcm (deflated 0%)
 adding: 1.3.12.2.1107.5.1.4.64517.30000014091005511462300042282.dcm (deflated 0%)

誰能解釋為什麼在使用 zip 時會發生這種情況?

正如評論中提到的,SO問題已經涵蓋了這一點。現在,我想試驗一下這種通貨緊縮實際上是如何運作的。所以,我做了下面的測試。

什麼是熵?

是資訊流不可預測性的度量。完全一致的比特流(全零或全一)是完全可預測的(沒有熵)。完全不可預測的比特流具有最大熵。資訊熵的概念歸功於克勞德香農,他給出了一個表達它的公式。

現在,我創建了一個文件,y如下n所示。

perl -e 'my $y; $y .= int(rand(100))>90 ? "y" : "n" for (0..999); print $y;' > f1

現在,我執行了命令,zip f1.zip f1得到的輸出為,

zip f1.zip f1
 adding: f1 (deflated 89%)

現在,在上面的命令中,我們有可預測的字節y,或者n這就是為什麼我們有 89 的縮小百分比。

現在,我正在進行如下實驗。

dd if=/dev/urandom of=./f2 bs=1M count=1

如果我執行命令zip f2.zip f2,這就是我得到的輸出。

zip f2.zip f2
 adding: f2 (deflated 0%)

由於這/dev/urandom是完全不可預測的,我們的通貨緊縮率為 0%。我在下面提供的參考連結很好地解釋瞭如何計算可預測字節的熵。

此外,還有這個工具ent可以在基於 debian 的系統中計算文件的熵。你可以做一個apt get install ent併計算熵率ent filename並找出真正發生的事情。

您可以從此處閱讀有關此命令的資訊。

參考

http://troydhanson.github.io/misc/Entropy.html

引用自:https://unix.stackexchange.com/questions/155069