最好的压缩方法?
我想压缩一个16GB的文件夹,但最好的方法是什么? tar.gz的? tar.bz2 rar? 7Z? 如果我首先在方法中压缩,然后将压缩的存档复制到新文件夹,然后在其他方法中重新压缩,存档是否会更小? 我需要让它适合DVD(输出可能是8.5GB,不记得)但是“4370 MB”使压缩文件成为2.5GB。
BTW,Ubuntu上的默认压缩方法是什么?
默认值为gz
。 我用7z
获得的最好成绩。
以下是1.4 Gb virtualbox容器的结果:
最佳压缩 – 以MB为单位的大小:
7z 493 rar 523 bz2 592 lzh 607 gz 614 Z 614 邮编614 .arj 615 lzo 737 动物园890
资源
安装
sudo apt-get install p7zip-full
这个问题很老了,但也许有人觉得这个解决方案很有用:
在tar
之后使用rzip
。 它首先使用字典方法压缩900 MB大数据块,然后将清理后的数据传递给bzip2
。 它比其他强大的压缩工具( bzip2
, lzma
)快得多,而且它压缩的一些文件甚至比bzip2
或lzma
更好。
是的, gz
是Linux上的默认压缩工具。 它很快,尽管它的年龄很长,它在压缩文本文件(如源代码)方面仍然提供了非常好的结果。 另一个标准工具是bzip2
,虽然速度要慢得多。
另外: lrzip更新,扩展了rzip的原理。 它甚至支持无限大小的块,以及压缩方法的选择(LZMA,Bzip2,Gzip,LZO,ZPAQ或无)。 LZMA是标准。 对于备份或如果您与其他Linux / BSD用户共享大量数据,它可以非常方便。
我选择LZMA
。 它具有最小的字节开销并具有强大的压缩比。 ZIP和LZMA之间的比较:我用PHP代码生成了两个文件seq.txt
$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位rnd.txt
数据的重复块和带有PHP代码的rnd.txt
$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赢了!