最佳压缩方法?

最佳压缩方法?

我想压缩一个 16GB 的文件夹,但最好的方法是什么?tar.gz?tar.bz2 rar?7z?如果我先用一种方法压缩,然后将压缩的档案复制到新文件夹,然后用其他方法重新压缩,档案会更小吗?我需要让它适合 DVD(输出可能是 8.5GB,不记得了),但输入“4370 MB”会使压缩文件只有 2.5GB 部分。

顺便问一下,Ubuntu 上的默认压缩方法是什么?

答案1

默认值为gz。不过这是我获得的最佳结果7z

以下是 1.4 Gb virtualbox 容器的结果:

在此处输入图片描述

最佳压缩 – 大小(MB):

7z 493
rar523
bz2 592
607
广州614
614 号
邮编 614
.arj 615
737 号
动物园 890

来源

在此处输入图片描述

安装

 sudo apt-get install p7zip-full

答案2

这个问题很老了,但也许有人发现这个解决方案很有用:

rzip在 之后使用tar。它首先使用字典方法压缩 900 MB 大数据块,然后将清理好的数据交给。它比其他强压缩工具( 、 )bzip2快得多,而且它压缩某些文件的效果甚至比或更好。bzip2lzmabzip2lzma

是的,gz是 Linux 上的默认压缩工具。它速度很快,尽管年代久远,但在压缩文本文件(如源代码)时仍然能提供很好的效果。另一个标准工具是bzip2,尽管它速度慢得多。

添加:lrzip 较新,扩展了 rzip 的原理。它甚至支持无限的块大小,以及多种压缩方法(LZMA、Bzip2、Gzip、LZO、ZPAQ 或无)。LZMA 是标准。对于备份或与其他 Linux/BSD 用户共享大量数据,它真的很有用。

答案3

我选择了LZMA。它的字节开销最小,压缩率也很高。ZIP 和 LZMA 之间的比较:我seq.txt用 PHP 代码生成了两个文件

$s = '0123456789'; $str = ''; for ($i=0; $i < 1000000; $i++) $str .= $s[$i%10].($i%10==9 ? "\n":""); file_put_contents('seq.txt', $str);

它保存了 0..9 位数字的重复块~ 1Mb 的数据和rnd.txtPHP 代码

$s = '0123456789'; $str = ''; for ($i=0; $i < 1000000; $i++) $str .= $s[rand(0,9)].($i%10==9 ? "\n":""); file_put_contents('rnd.txt', $str);

它保存了0..9位数字~1Mb的随机数据块。

压缩结果:

  • seq.txt,rnd.txt-1100000 字节
  • seq.txt.zip - 2502 字节
  • rnd.txt.zip - 515957 字节
  • seq.txt.lzma - 257 字节
  • rnd.txt.lzma - 484939 字节

压缩率:

  • ZIP -> “seq.txt” -> 99.772%
  • ZIP -> “rnd.txt” -> 53.094%
  • LZMA -> “seq.txt” -> 99.976%
  • LZMA -> “rnd.txt” -> 55.914%

因此,LZMA 对顺序数据的压缩效率比 ZIP 数据高 0.2%
,对随机数据的压缩效率比 ZIP 数据高 2.8%。

毫无疑问 LZMA 会获胜!

相关内容