使用 7 Zip 压缩文件时使用的最佳选项是什么?

jjn*_*guy 98 compression zip 7-zip

我经常需要收集日志文件并将它们上传到中央服务器(由另一家公司拥有)。中央服务器对文件有大小限制,因此我试图创建仍为 zip 格式的最小文件。

当我只需要一个小文件时,将文本文件压缩为 zip 格式时使用的最佳设置是什么?

7zip 选项

我已经完成了明显的和选择的超压缩,并且我注意到 LZMA 比 deflate 做得更好,但是还有太多其他选项可供我测试。

ken*_*orb 96

要创建 7-Zip 可以创建的最小标准 ZIP 文件,请尝试:

7z a -mm=Deflate -mfb=258 -mpass=15 -r foo.zip C:\Path\To\Files\*
Run Code Online (Sandbox Code Playgroud)

来源:我怎样才能实现最佳的标准 ZIP 压缩?

否则,如果您不关心 ZIP 标准,请使用以下超设置:

7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on archive.7z dir1
Run Code Online (Sandbox Code Playgroud)

哪个是:

-t7z   7z archive

-m0=lzma
       lzma method

-mx=9  level of compression = 9 (Ultra)

-mfb=64
       number of fast bytes for LZMA = 64
-md=32m
       dictionary size = 32 megabytes

-ms=on solid archive = on
Run Code Online (Sandbox Code Playgroud)

  • 我会用lzma2 (11认同)
  • @Tek:为什么?这不是一个好的。问题是关于使用“标准 ZIP 格式”,所以答案不应该是指定 LZMA。-ms=on 适用于 .7z,而不是标准的 zip 文件。-md 与 BZip2 相关,所以我不认为它会影响 ZIP(甚至 LZMA)。-mfb=64 是一个未优化的值:-mfb=258 生成更小的 zip 文件。而且这个答案甚至没有提到 -mpass=15 会影响 zip 文件。这是一个格式很好的答案,不幸的是,它在很多方面都是错误的。 (4认同)

小智 28

经过大量实验,深入研究详细的 7zip 文档,并阅读了一些关于高级 LZMA2 参数的 7z 源代码,下面是一个更好的方法。它减少了一些 1GB 真实世界的测试文件,这里发布的以前接受的解决方案甚至 7z 联机帮助页中的解决方案要好 2 到 4 倍

7z a -t7z -mx=9 -mfb=273 -ms -md=31 -myx=9 -mtm=- -mmt -mmtf -md=1536m -mmf=bt3 -mmc=10000 -mpb=0 -mlc=0 archive.7z inputfileordir
Run Code Online (Sandbox Code Playgroud)

此处假定 LZMA2 压缩,但您可能能够通过传递高级 LZMA2 选项(如-m0=LZMA2:27、 或-m0=LZMA2:d25)或一系列参数(如

-m0=BCJ2 -m1=LZMA:d25 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1
Run Code Online (Sandbox Code Playgroud)

我测试的 7z 版本似乎没有考虑这些参数,但您可能需要进一步探索或修补 7z 代码以正确解析它们。或者它应该可以工作,只是在经过测试的构建中被破坏了。

  • 哇,这真的有很大的不同。对于我的存档,我尝试了许多其他建议,包括此处的其他答案,我得到的最佳结果是 99MB,而使用这些设置则为 85MB。 (3认同)
  • 您的命令使用了惊人的 45 GB 虚拟内存。在我的 PC 上,这导致 OOM-Killer 杀死了它。因此,对于 RAM 为 16 GB 或更少的人来说,这似乎不是解决方案。 (2认同)

Umb*_*ule 18

如果您可以使用 .7z 格式而不仅仅是 .zip,我将简单地使用带有以下选项的PPMD,并将其他所有内容保留为压缩级别设置:

  • 存档格式:7z
  • 压缩方式:PPMD
  • 压缩级别:

我经常使用这些选项压缩服务器/文本日志 (60MB+),它们通常以原始大小的1-2%出现。

  • 我也注意到了。它打开内容就好了。但是,当我实际尝试查看 zip 文件中的其中一个文件时,它失败了。 (4认同)
  • 为什么 PPMD​​ 是文本文件的优越压缩方法? (4认同)
  • LZMA2 为文本文件提供了比 PPMD​​ 更好的结果。 (3认同)

har*_*ymc 11

我决定做一些实验来凭经验找到最佳压缩参数。

我使用的工具是 7-ZIP 微调器。该工具通过简单地重复压缩与寻找最佳组合的不同参数来寻找最佳参数。即使在快速的计算机上运行一个文件有时也可能需要一个多小时。

它尝试的参数是:

LC : number of Literal Context bits
LP : number of Literal Pos bits
PB : number of Pos Bits
YX : level of file analysis
FB : number of Fast Bytes
Run Code Online (Sandbox Code Playgroud)

我将字典大小的默认参数保留为 512 MB,并将实体块大小保留为 On。该工具使用 LZMA 方法。

几种类型文件的最佳参数组合如下:

在此处输入图片说明

我注意到即使对于相同类型的文件,最佳值也不是恒定的。

结论:没有最佳选择,因为每个文件可能都有自己独特的最佳组合。可以将所有参数驱动到它们的极限,但根本不能保证改进。

最常见的组合似乎是:

LC : 8
LP : 0
PB : 1
YX : 5
FB : 273
Run Code Online (Sandbox Code Playgroud)

一些 7-Zip 参考资料:


SUL*_*IMa 7

我将 Ubuntu 服务器 14.04.03 中的 db.fdb 1,2 GB (1236598784 B) 与 VM 上的 p7zip [64] 9.20 进行比较:

1. 7z a -mx=9 1.7z db.fdb
2. 7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on 2.7z db.fdb
3. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on 3.7z db.fdb
4. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on -pass=15 4.7z db.fdb
5. 7z a -mx=9 -mmt=on 5.7z db.fdb
6. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on -mmt=on 6.7z db.fdb
Run Code Online (Sandbox Code Playgroud)

并有这样的结果:

1.7z 96 MB (100108731 B) with 6' 25"
2.7z 95 MB ( 99520375 B) with 5' 18"
3.7z 93 MB ( 97512311 B) with 9' 19"
4.7z 93 MB ( 97512345 B) with 9' 40"
5.7z 96 MB (100108731 B) with 5' 26"
6.7z 93 MB ( 97512311 B) with 9' 09"
Run Code Online (Sandbox Code Playgroud)

我认为第二种方法效果很好 =(几乎)最好的压缩时间。但是为了最好的“视图”和易于记忆是第一种方法 - 使用小文件并且没有最大压缩点。在 2 和 3 方法之间,我们不会得到更小的 7z,但要为压缩多花几乎两倍的时间。任何人自己决定。


Rob*_*edy 0

将“分割到卷,字节”字段设置为服务器允许的最大文件大小(我认为以字节为单位,尽管它看起来接受“KB”和“MB”等常见缩写)。如果 zip 文件超过该大小,7-zip 会自动将其拆分为多个文件,例如integration_serviceLog.zip.001integration_serviceLog.zip.002等。(很久以前,PK Zip 使用此方法将 zip 文件跨越多个文件)软盘。)您需要所有文件都存在才能解压缩它们。使用它而不用担心用于任何特定文件集的绝对最佳压缩设置,因为对一个文件来说最好的压缩设置可能对另一个文件来说是不同的,并且您不希望每次需要时都经历这个复制日志。