我想压缩一个 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
快得多,而且它压缩某些文件的效果甚至比或更好。bzip2
lzma
bzip2
lzma
是的,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.txt
PHP 代码
$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 会获胜!