关于压缩工具 7z(7-zip) 如何设置压缩算法(选项 -m 的解读)
-m (设置压缩算法) 选项,此选项用于指定压缩算法,此选项的格式依压缩档案的类型而定。
文章目录
- 一、用于指定压缩算法的选项 -m 介绍
- 二、Zip 参数
- 三、Gzip 参数
- 四、7z 参数
-
- (一)x=[0 | 1 | 5 | 7 | 9 ],设置压缩等级
- (二)s=[off | on | [e] [{N}f] [{N}b | {N}k | {N}m | {N}g)] 开启或关闭固实模式
- (三)f=[off | on] 开启或关闭可执行文件压缩过滤器
- (四)hc=[off | on] 开启或关闭档案文件头压缩
- (五)hcf=[off | on] 开启或关闭档案文件头完全压缩
- (六)he=[off | on] 开启或关闭档案文件头加密
- (七){N} 设置算法的顺序
- (八)b{C1}[s{S1}]:{C2}[s{S2}]
- (九)mt=[off | on] 开启或关闭多线程压缩模式
- (十){N}={MethodID}[:param1][:param2] ... [:paramN] 设置压缩算法
- 五、选项 -m 的示例
-
- (一)不压缩而直接将 *.jpg 文件添加到 archive.zip 档案
- (二)添加 *.exe 及 *.dll 文件到固实压缩档案 archive.7z。使用 LZMA 压缩算法、2 MB 字典大小及 BCJ 转换器。压缩将开启多线程优化(如果可用)
- (三)添加 *.exe 及 *.dll 文件到压缩档案 archive.7z。使用 LZMA 压缩算法、BCJ2 转换器、为主输出流(s0)使用 8 MB 字典大小、LZMA 算法为 BCJ2 转换器的 s1 及 s2 输出流使用 512 KB 字典大小。
- (四)添加 *.txt 文件到压缩档案 archive.7z。 使用 PPMd 压缩算法
一、用于指定压缩算法的选项 -m 介绍
-m (设置压缩算法) 选项,此选项用于指定压缩算法,此选项的格式依压缩档案的类型而定。
语法:-m[method_parameters]
二、Zip 参数
| Zip参数 | 默认值 | 说明 |
|---|---|---|
x=[0 | 5 | 9 ] |
5 | 设置压缩等级。 |
m={MethodID} |
Deflate | 设置压缩算法:Copy、Deflate、Deflate64、BZip2。 |
fb={NumFastBytes} |
32 | 设置 Deflate 编码器的单词大小。 |
pass={NumPasses} |
1 | 设置 Deflate 编码器的传送大小。 |
(一)X=[0 | 5 | 9 ],设置压缩等级
| 压缩等级 | 说明 |
|---|---|
| 0 | 不压缩。 |
| 5 | 默认的压缩等级。 |
| 9 | 最大压缩等级。压缩后的文件会更小。但是在压缩的时候会比较慢而且需要较多的物理内存。 |
(二)fb={NumFastBytes},设置 Deflate 编码器的单词大小
您可以在 3 到 255 范围之内更改。在 Deflate 算法下,它的默认值是 32;在 Deflate 64 算法下,它的默认值是 64。如果要压缩的多个文件中,有很多排列相同的字节,比如说内容及格式极为相同的两个纯文本文档,那么在压缩的时候如果有较大的单词大小,将会在一定程 度上提高压缩比。所以通常情况下,其数量越大,压缩后的文件就会越小。但是在压缩和解压缩的时候会比较慢而且需要较多的物理内存。
(三)pass={NumPasses},设置 Deflate 编码器的传送大小
您可以在 1 到 4 范围之内更改。在 Deflate 算法下,它的默认值是 1;在 Deflate 64 算法下,它的默认值是 3。此项可略微提升压缩比,但并不明显。
三、Gzip 参数
除了 GZip 不支持“储存”压缩算法之外,GZip 和 Zip 一样使用着相同的参数。
四、7z 参数
| 7z参数 | 默认值 | 说明 |
|---|---|---|
x=[0 | 5 | 9 ] |
5 | 设置压缩等级 |
s=[off | on | [e] [{N}f] [{N}b | {N}k | {N}m | {N}g] |
on | 设置固实模式 |
f=[off | on] |
on | 开启或关闭可执行文件压缩过滤器 |
hc=[off | on] |
on | 开启或关闭档案文件头压缩 |
hcf=[off | on] |
on | 开启或关闭档案文件头完全压缩 |
he=[off | on] |
off | 开启或关闭档案文件头加密。 |
mt=[off | on] |
off | 设置多线程模式。 |
b{C1}[s{S1}]:{C2}[s{S2}] |
设置编码器之间绑定。 | |
{N}={MethodID}[:param1][:param2][..] |
LZMA | 设置压缩算法:LZMA、PPMd、BZip2、Deflate、BCJ、BCJ2、Copy。 |
(一)x=[0 | 1 | 5 | 7 | 9 ],设置压缩等级
| 压缩等级 | 说明 |
|---|---|
| 0 | 不压缩。 |
| 1 | 快速压缩:LZMA 快速算法、32KB 字典大小、HC3 Match finder、BCJ 过滤器。 |
| 5 | 正常压缩:LZMA 标准算法、2 MB 字典大小、BT4 Match finder、单词大小为 32、BCJ 过滤器。 |
| 7 | 最大压缩:LZMA 最大算法、8 MB 字典大小、BT4 Match finder、单词大小为 64、BCJ 过滤器。 |
| 9 | 极限压缩:LZMA 最大算法、32 MB 字典大小、BT4b Match finder、单词大小为 64、BCJ2 过滤器。 |
(二)s=[off | on | [e] [{N}f] [{N}b | {N}k | {N}m | {N}g)] 开启或关闭固实模式
此选项的默认值是 s=on。
开启或关闭固实压缩档案模式。在创建固实压缩档案模式中,它把压缩档案中的所有文件都当成一个连续数据流来看待。通常情况下,固实压缩可增加压缩比,特别是在添加大量小文件的时候。
e:为每一种文件扩展名使用单独的固实数据流{N}f:设置在一个固实数据流文件的个数。例如,10f,设置每个固实数据流种最多 10 文件。{N}b | {N}k | {N}m | {N}g:设置固实数据流的大小。例如,10b,表示10个字节,10k,表示10个千字节。
1.不同的压缩等级对固实数据流大小的限制
| 压缩等级 | 大小 |
|---|---|
| 快速 | 16 MB |
| 正常 | 256 MB |
| 最大 | 1 GB |
| 极限 | 4 GB |
对固实数据流大小的限制虽然能影响到压缩比,但是它还是有相当多的优势:
- 万一压缩档案损坏,并不会丢失所有数据
- 减少了文件的释放时间
2.示例
-s=100f10m
设置固实模式使每个固实数据流种最多 100 文件,并且最大 10 MB 。
(三)f=[off | on] 开启或关闭可执行文件压缩过滤器
可执行文件:dll、exe、ocx、sfx、sys。
它用于 BCJ2 过滤器(使用极限压缩)及 BCJ 过滤器中。此选项的默认值是 f=on。
(四)hc=[off | on] 开启或关闭档案文件头压缩
此选项的默认值是 hc=on。如果开启档案文件头压缩,一部分档案的文件头将使用 LZMA 算法进行压缩。
(五)hcf=[off | on] 开启或关闭档案文件头完全压缩
此选项的默认值是 hcf=on。如果开启档案文件头完全压缩,那么此压缩档案只有 7-Zip 2.30 beta 25 及更高的版本才能支持。
(六)he=[off | on] 开启或关闭档案文件头加密
此选项的默认值是 he=off。
(七){N} 设置算法的顺序
它也可以用算法关联参数。最小值为 0。含有从号的算法将被首先使用。
(八)b{C1}[s{S1}]:{C2}[s{S2}]
将输出流 S1 及编码器 C2 中的输入流 S2 与编码器 C1 绑定。如果未指定流的大小,那么大小将为 0。通常情况下,编码器有一个输入流及一个输出流。而在 7z 中,一些编码器有多个输入及输出流。
(九)mt=[off | on] 开启或关闭多线程压缩模式
在多线程支持模式中,7-Zip 将使用两个线程来进行压缩。这样的话,对于多处理器系统,那么压缩速度将提升 70-80%。对于 Pentium 4 超线程处理器,压缩速度将提升 25% 左右。但解压缩时只使用单独线程。注意!此选项仅对 LZMA 压缩算法有效。
(十){N}={MethodID}[:param1][:param2] … [:paramN] 设置压缩算法
在 7z 格式中,您可以使用许多压缩算法。此选项的默认算法是 LZMA。此参数必须是下列格式中的任意一种:
{ParamName}={ParamValue}{ParamName}{ParamValue}
{ParamValue} 是一个数值,并且 {ParamName} 中不包含数字。
1.支持的压缩算法
| MethodID | 说明 |
|---|---|
| LZMA | 基于 LZ 之上的压缩算法。 |
| PPMd | 基于 Dmitry Shkarin 之上的算法 PPMdH 并加以优化。通常能对纯文本提供高压缩比及较快的解压缩速度。 |
| Bzip2 | 基于 BWT 的标准压缩算法。通常能对纯文本提供较高压缩比及相当不错的解压缩速度。 |
| Deflate | ZIP 及 GZip 格式的标准压缩算法。没有很高的压缩比。但是它拥有十分快的压缩及解压缩速度。Deflate 压缩算法只支持 32 KB 字典大小。 |
| BCJ | (CALL、JUMP)32 位 x86 可执行文件转换器。 |
| BCJ2 | (CALL、JUMP、JCC)32 位 x86 可执行文件转换器(第二版)。 |
| Copy | 不压缩。 |
2.LZMA 算法
LZMA 是基于 Lempel-Ziv(由以色列数学家 A.Lempel 和 J.Ziv 共同开发的压缩算法)之上的压缩算法。它能提供相当快的解压缩速度(约比压缩快 10 到 20 倍)。对内存的需求也不尽相同(详细信息请参见 d={Size}[b|k|m] 选项)。
| 参数 | 默认值 | 说明 |
|---|---|---|
a=[0|1|2] |
1 | 设置压缩等级 |
d={Size}[b|k|m] |
20 | 设置字典大小 |
mf={MF_ID} |
bt4 | 设置匹配器 |
fb={N} |
32 | 设置紧缩字节数量 |
lc={N} |
3 | 设置 Literal Context 块数 - [0, 8] |
lp={N} |
0 | 设置 Literal Pos 块数 - [0, 4] |
pb={N} |
2 | 设置 Pos 块数 - [0, 4] |
(1)a=[0|1|2]
设置压缩等级:0=快速、1=正常、2=最大压缩。默认值为 1。
(2)d={Size}[b|k|m]
设置 LZMA 压缩算法的字典大小。您可以使用字节、KB 或 MB 来指定此项。字典大小的最大值为 256 MB= 2 28 2^{28} 228 字节。正常模式下,LZMA 的字典大小默认值为 21( 2 1 2^1 21 ,2 MB) ;最大模式(-mx=7)下为 23(8 MB);极限模式(-mx=9)下为 25( 2 5 2^5 25 ,32 MB)。如果您未指定 [b|k|m] 项,字典大小将自动根据压缩等级来选择相应的单位。对于 LZMA 算法的文件解压缩,若压缩文件的字典大小为 64 MB,则解压缩时就需要 64 兆可用的物理内存。
(3)mf={MF_ID}
设置 LZMA 压缩算法的匹配器。默认算法为 bt4。bt* 类的算法所需的内存比 pat* 类所需的内存少。通常情况下 bt4 的工作速度比 pat* 快得多,然而部分文件格式在 pat* 算法中可以工作的很快。hc* 类算法并没有很好得压缩比,但是它与快速模式(a=0)结合使用通常会工作得相当快。所需内存依字典大小而定(参见下表)。
| MF_ID | 所需内存 | 说明 |
|---|---|---|
| bt2 | d×9.5 + 1 MB | 二进制树;2 散列字节。 |
| Bt3 | d×9.5 + 65 MB | 二进制树;2-3(完整) 散列字节。 |
| Bt4 | d×9.5 + 6 MB | 二进制树;2-3-4 散列字节。 |
| Bt4b | d×9.5 + 34 MB | 二进制树;2-3-4(大) 散列字节。 |
| Pat2r | d×26 + 1 MB | Patricia 树;2-位节点;可移动。 |
| Pat2 | d×38 + 1 MB | Patricia 树;2-位节点。 |
| Pat2h | d×38 + 77 MB | Patricia 树;2-位节点;2-3 散列字节。 |
| Pat3h | d×62 + 85 MB | Patricia 树;3-位节点;2-3 散列字节。 |
| Pat4h | d×110 + 101 MB | Patricia 树;4-位节点;2-3 散列字节。 |
| Hc3 | d×5.5 + 1 MB | Hash Chain;-3 散列字节。 |
| Hc4 | d×5.5 + 6 MB | Hash Chain;2-3-4 散列字节。 |
注意:操作系统同样需要一部分物理内存来维持系统得正常运行,至少要剩余 32 可用物理内存。
(4)fb={N}
设置 LZMA 压缩算法的紧缩字节。有效范围从 5 到 255。正常模式下默认值为 32;最大模式下为 64 。通常情况下,较大的数值能略微提高压缩比。但同时也会降低压缩速度。
(5)lc={N}
设置 Literal Context 位数。有效范围从 0 到 8。默认值为 3。有时压缩档案中含有大文件会自动使用 lc=4。
(6)lp={N}
设置 Literal Pos 位数。有效范围从 0 到 4。默认值为 0。
(7)pb={N}
设置 Pos 位数。有效范围从 0 到 4。默认值为 2。
(8)PPMd
PPMd 是 PPM-based 压缩算法的简写。它基于 Dmitry Shkarin 的算法 PPMdH 并对其源代码加以优化。PPMd 通常能对纯文本提供高压缩比及较快的解压缩速度。压缩和解压缩的速度完全相同,所需的内存大小也一样。
| 参数 | 默认值 | 说明 |
|---|---|---|
mem={Size}[b|k|m] |
24 | 设置 PPMd 算法使用的内存多少。您可以使用字节、KB 或 MB 来指定此项。最大值为 2 GB=2^31 字节;默认值为 24(16MB)。如果您未指定 [b |
o={Size} |
6 | 设置 PPMd 算法压缩命令。其大小必须在 [2,32] 范围内。默认值为 6。 |
(9)BCJ2
BCJ2 是 32 位 x86 可执行文件转换器(第二版)。它通过转换分支指令来对文件进行进一步压缩。
BCJ2 编码器有一个输入流和四个输出流:s0:干流。提供进一步的压缩。s1:CALL 值转换流。提供进一步的压缩。s2:JUMP 值转换流。提供进一步的压缩。s3:服务流。它已经备压缩过。
如果使用 LZMA 压缩算法,s1 及 s2 流的字典大小将会比 s0 流的小(512 KB)。
五、选项 -m 的示例
(一)不压缩而直接将 *.jpg 文件添加到 archive.zip 档案
[root@htlwk0001host ~]# 7z a -tzip archive.zip *.jpg -m0
(二)添加 *.exe 及 *.dll 文件到固实压缩档案 archive.7z。使用 LZMA 压缩算法、2 MB 字典大小及 BCJ 转换器。压缩将开启多线程优化(如果可用)
[root@htlwk0001host ~]# 7z a -t7z archive.7z *.exe *.dll -m0=BCJ -m1=LZMA:d=21 -ms -mmt
(三)添加 *.exe 及 *.dll 文件到压缩档案 archive.7z。使用 LZMA 压缩算法、BCJ2 转换器、为主输出流(s0)使用 8 MB 字典大小、LZMA 算法为 BCJ2 转换器的 s1 及 s2 输出流使用 512 KB 字典大小。
[root@htlwk0001host ~]# 7z a -t7z archive.7z *.exe *.dll -m0=BCJ2 -m1=LZMA:d23 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1 -mb0s1:2 -mb0s2:3
(四)添加 *.txt 文件到压缩档案 archive.7z。 使用 PPMd 压缩算法
[root@htlwk0001host ~]# 7z a -t7z archive.7z *.txt -m0=PPMd
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)