jjn*_*guy 98 compression zip 7-zip
我经常需要收集日志文件并将它们上传到中央服务器(由另一家公司拥有)。中央服务器对文件有大小限制,因此我试图创建仍为 zip 格式的最小文件。
当我只需要一个小文件时,将文本文件压缩为 zip 格式时使用的最佳设置是什么?

我已经完成了明显的和选择的超压缩,并且我注意到 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 标准,请使用以下超设置:
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)
小智 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 代码以正确解析它们。或者它应该可以工作,只是在经过测试的构建中被破坏了。
Umb*_*ule 18
如果您可以使用 .7z 格式而不仅仅是 .zip,我将简单地使用带有以下选项的PPMD,并将其他所有内容保留为压缩级别设置:
我经常使用这些选项压缩服务器/文本日志 (60MB+),它们通常以原始大小的1-2%出现。
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 参考资料:
我将 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,但要为压缩多花几乎两倍的时间。任何人自己决定。
将“分割到卷,字节”字段设置为服务器允许的最大文件大小(我认为以字节为单位,尽管它看起来接受“KB”和“MB”等常见缩写)。如果 zip 文件超过该大小,7-zip 会自动将其拆分为多个文件,例如integration_serviceLog.zip.001、integration_serviceLog.zip.002等。(很久以前,PK Zip 使用此方法将 zip 文件跨越多个文件)软盘。)您需要所有文件都存在才能解压缩它们。使用它而不用担心用于任何特定文件集的绝对最佳压缩设置,因为对一个文件来说最好的压缩设置可能对另一个文件来说是不同的,并且您不希望每次需要时都经历这个复制日志。
| 归档时间: |
|
| 查看次数: |
284436 次 |
| 最近记录: |