在使用7 Zip压缩文件时,有哪些最佳选择?
我经常需要收集日志文件,并将其上传到中央服务器(由另一家公司拥有)。中央服务器对文件的大小有限制,所以我试图创建一个尽可能小的文件,而且还是zip格式的。
当我只需要一个小文件时,将文本文件压缩成zip格式时,最好的设置是什么?
我已经做了很明显的选择,选择了超压缩,而且我注意到LZMA比deflate做的更好,但是有太多其他的选项组合,我无法全部测试。
我经常需要收集日志文件,并将其上传到中央服务器(由另一家公司拥有)。中央服务器对文件的大小有限制,所以我试图创建一个尽可能小的文件,而且还是zip格式的。
当我只需要一个小文件时,将文本文件压缩成zip格式时,最好的设置是什么?
我已经做了很明显的选择,选择了超压缩,而且我注意到LZMA比deflate做的更好,但是有太多其他的选项组合,我无法全部测试。
要创建7-Zip能创建的最小标准ZIP文件,请尝试。
7z a -mm=Deflate -mfb=258 -mpass=15 -r foo.zip C:\Path\To\Files\*
否则如果你不在乎ZIP标准,就用下面的超设置。
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on archive.7z dir1
哪些是:
-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
``` 哪些是:
0x1&
如果你可以使用.7z格式而不仅仅是.zip,我会简单地使用PPMD和以下选项,并保留其他所有的压缩级别设置:
经过大量的实验,翻阅了详细的7zip文档,并阅读了一些7z源代码中关于高级LZMA2参数的内容,下面是一个更好的方法。它减少了一些1GB的实际测试文件,比之前接受的解决方案在这里甚至在7z manpage上发布的好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
这里假设的是 LZMA2 压缩,但你可能会在 7zip 中通过高级 LZMA2 选项(如 -m0=LZMA2:27
,或 -m0=LZMA2:d25
),或一系列参数(如
-m0=BCJ2 -m1=LZMA:d25 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1
)来获得更好的性能,我测试的 7z 版本似乎并不尊重这些参数,但你可能需要进一步探索或修补 7z 代码来正确解析它们。或者,也许它本来就应该工作,只是在测试的版本中被破坏了。
我在Ubuntu服务器14.04.03中用p7zip [64] 9.20对db.fdb 1,2 GB (1236598784 B)进行了比较:
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
结果如下。
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"
我认为第二种方法工作得很好=(几乎)最好的压缩和最好的时间。但是对于最好的 “视图 "和容易记住的是第一种方法–小文件和没有最大压缩点。在第2和第3种方法之间,我们没有得到额外的小7z,但付出了几乎多2o的压缩时间。任何人都可以用自己的方法来决定。
我决定做一些实验,根据经验寻找最佳压缩参数。
我使用的工具是wa 7-ZIP finetuner 。这个工具通过简单地重复压缩不同的参数来寻找最佳的参数组合。即使在速度很快的电脑上,一个文件的运行有时可能需要一个多小时。
它尝试的参数是
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
我把字典大小的默认参数定为512MB,实体块大小为On. 该工具使用的是LZMA方法。
几种类型文件的最佳参数组合如下。
我注意到,即使是同一类型的文件,最佳值也不是恒定的。
结论。没有最佳选项 ,因为每个文件都可能有自己独特的最佳组合。我们可以将所有的参数都开到极限,但根本无法保证改进。
最常见的组合似乎是:
LC : 8
LP : 0
PB : 1
YX : 5
FB : 273
一些7-Zip引用。
将 “split to volume, bytes "字段设置为服务器允许的最大文件大小(我想是以字节为单位,尽管它看起来像接受 "KB "和 "MB "这样的常用缩写)。如果压缩文件超过了这个大小,7-zip会自动将其分割成多个文件,比如integrationserviceLog.zip.001,integrationserviceLog.zip.002等等(很久以前,PK Zip用这个方法将压缩文件跨越多个软盘)。你需要所有的文件都存在才能解压。使用它而不是担心对任何特定文件集使用的绝对最佳压缩设置,因为对一个文件的最佳设置可能对另一个文件不同,你不想每次需要复制日志时都要经历这个过程。