Zip 压缩时不会压缩文件

Zip 压缩时不会压缩文件

我已在目录中递归压缩文件。但我注意到最后几个 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 时会发生这种情况?

答案1

正如在评论,SO问题几乎涵盖了这一点。现在,我想尝试一下这种通货紧缩实际上是如何运作的。所以,我做了以下测试。

什么是熵?

是信息流不可预测性的度量。完全一致的比特流(全零或全一)是完全可预测的(没有熵)。完全不可预测的比特流具有最大熵。信息熵的概念归功于克劳德·香农(Claude Shannon),他给出了表达它的公式。

现在,我创建了一个文件,如下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%)

现在,在上面的命令中,我们有可预测的字节yn这就是为什么我们的百分比缩减为 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

相关内容