哪种 Linux 文件压缩软件可以最大程度地减少源代码的大小?

哪种 Linux 文件压缩软件可以最大程度地减少源代码的大小?

我进行了大量的文件压缩。我压缩的大部分内容只是代码,所以我需要使用无损压缩。

我想知道是否有任何东西可以比 7zip 提供更好的尺寸减小效果。压缩或解压缩需要多长时间并不重要;尺寸才是最重要的。

有谁知道 Linux 中可用的各种工具和压缩算法在压缩文本方面的比较如何?或者 7zip 是压缩源代码的最佳选择吗?

答案1

压缩包就是你真的寻找,尤其如果您要压缩源代码!

引用自述文件:

这是针对大文件优化的压缩程序。文件越大,内存越多,压缩优势就越大,特别是当文件大于 100MB 时。优势可以选择为大小(比 bzip2 小得多)或速度(比 bzip2 快得多)。 [...]lrzip 的独特功能是它始终尝试充分利用系统中的可用 RAM 以获得最大收益。

lrzip 的工作原理是首先使用基于 rzip 的算法扫描并删除任何长距离数据冗余,然后压缩非冗余数据。

康科利瓦斯提供Linux 内核邮件列表中的一个很棒的例子;其中他压缩了一个 10.3GB 的 tarball四十Linux 内核版本降至 163.9MB (1.6%),并且比 xz 更快。他甚至没有使用最激进的第二遍算法!

我确信压缩大量源代码 tarball 会得到很好的结果:)

sudo apt-get install lrzip

示例(对其他选项使用默认值):

超压缩,狗慢:

lrzip -z file

对于文件夹,只需更改lrziplrztar

答案2

7zip与其说它是一个压缩器,不如说它是一个压缩器(如 PKZIP)。它可用于 Linux,但它只能在常规文件中创建压缩档案,例如它无法压缩流。它无法存储大多数 Unix 文件属性,例如所有权、ACL、扩展属性、硬链接......

在 Linux 上,作为压缩机,您已经使用与(LZMA2)xz相同的压缩算法。7zip您可以使用它来压缩 tar 档案。

就像 和gzip一样bzip2,有一个平行线pixz可以利用多个处理器来加速压缩的变体(xz也可以从 5.2.0 版本开始使用该选项本地执行此-T操作)。该pixz变体还支持索引压缩tar存档,这意味着它能够提取单个文件,而无需从头开始解压缩文件。


脚注

紧凑是归档+压缩(可能带有索引,可能成员单独压缩),归档并不意味着压缩。这不是 DOS 的东西,但可能是法国的东西。在谷歌上搜索 usenet 档案,我似乎只看到了我的文章,所以它很可能是我的发明,尽管我坚信它不是。

答案3

(更新的答案)如果时间不重要,请使用 ZPAQ v1.10(或更高版本)例如:
zpaq pvc/usr/share/doc/zpaq/examples/max.cfg file.zpaq file.tar (max.cfg 文件位置可能会有所不同,请检查已安装的软件包文件列表)

zpaq实际上压缩了超过kgb -9 newFileName.kgb yourFileName.tar.
这是基于旧算法的PAQ6,而且非常慢...
我测试了所有其他压缩器,如 7zip、lrzip、bzip2、kgb.. 和 zpaq 压缩最多!


如果kgb您仍然感兴趣:(因为这是我对此答案的最初选择,所以我将信息保留在这里)
Ubuntu 14.04 有克格勃1.0b4,运行sudo apt-get install kgb安装它。

下面是关于一个windows版本,你可以尝试kgb在linux上运行/编译,但我没有成功。
版本 2 beta2 可以在以下位置找到来源锻造,但没有可用的 Linux 二进制文件。你可以尝试在控制台中运行它wine kgb2_console.exe -a7 -m9(方法-a6 -m9似乎相当于1.0b4中最好的方法,-a7是2 beta2中的新方法)。虽然我通过安装 .NET 2.0 获得了更好的稳定性葡萄酒技巧并运行wine "KGB Archiver 2 .net.exe"(我不喜欢这样做,所以我会坚持使用原生 Linux 1.0b4,它的结果与 2 beta2 几乎相同)。
不管怎样,版本 2 beta2 也确实值得一个 Linux 原生版本!也许可以用 MinGW 来完成一些事情,请参阅,但是这个命令仍然严重失败:i586-mingw32msvc-g++ kgb2_console.cpp -o kgb。可以尝试用dmcs(Mono)编译它吗?看这个提示

答案4

Z标准值得一提。尽管使用默认设置,它的压缩效果不如 xz,但它的压缩和解压缩速度要快得多。当Arch Linux从 xz 切换到 zstd,他们报道

我们所有包的包大小合计增加了约 0.8%,但所有包的解压时间都加速了约 1300%

今天我用xz和zstd压缩了同样的684M文本语料。我没有做任何严格的测试,YMMV,但差异如此之大,似乎没有必要:

  • xz花了9分36秒将其压缩到71M,解压用了9秒
  • zstd(默认选项)花了6s压缩到123M,解压<2s
  • zstd -9花了 42 秒将其压缩到 99M,再次解压不到 2 秒。
  • zstd -19比 xz 慢 12 分 40 秒,但压缩到 70M 更好,并且仍然在 <2 秒内解压。

相关内容