文章目录
7z是已知最大压缩比的工具,它的使用比较复杂, 以下我记下的一些技巧
压缩命令(结合tar命令): tar cf - /home/test | 7z a -si test.tar.7z
上面命令将 /home/test 文件夹压缩为 test.tar.7z 文件
解压命令(结合tar命令) : 7z x -so test.tar.7z | tar xf - /home/alex
这个命令将test.tar.7z 的内容解压到 /home/alex目录下
根据不同需要,还可以设置不同压缩比 ,这个命令特别适合做RAMDISK时候使用
-m (设置压缩算法) 选项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249
| 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
参数 默认 说明
x=[0 | 1 | 5 | 7 | 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 开启或关闭档案文件头加密。
b{C1}[s{S1}]:{C2}[s{S2}] 设置编码器之间绑定。
{N}={MethodID}[:param1][:param2][..] LZMA 设置压缩算法:LZMA、PPMd、BZip2、Deflate、BCJ、BCJ2、Copy。
mt=[off | on] off 设置多线程模式。
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 设置在一个固实数据流种文件的个数
{N}b | {N}k | {N}m | {N}g 设置固实数据流的大小(字节)
不同的压缩等级对固实数据流大小的限制:
压缩等级 大小
储存 0 B
快速 16 MB
正常 256 MB
最大 1 GB
极限 4 GB
对固实数据流大小的限制虽然能应响到压缩比,但是它还是有相当多的优势:
万一压缩档案损坏,并不会丢失所有数据。
减少了文件的释放时间。
在当前的版本中,您只能更新在压缩时未选择“创建固实压缩档案”的压缩档案。也就是说当前版本不支持固实压缩档案的更新。
示例:
-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 中,一些编码器有多个输入及输出流。
举个例子,BCJ2 编码器有有关输入流及四个输出流。
mt=[off | on]
开 启或关闭多线程压缩模式。在多线程支持模式中,7-Zip 将使用两个线程来进行压缩。这样的话,对于多处理器系统,那么压缩速度将提升 70-80%。对于 Pentium 4 超线程处理器,压缩速度将提升 25% 左右。但解压缩时只使用单独线程。注意!此选项仅对 LZMA 压缩算法有效。
{N}={MethodID}[:param1][:param2] ... [:paramN]
设置压缩算法。在 7z 格式中,您可以使用许多压缩算法。此选项的默认算法是 LZMA。
此参数必须是下列格式中的任意一种:
{ParamName}={ParamValue}。
{ParamName}{ParamValue},{ParamValue} 是一个数值,并且 {ParamName} 中不包含数字。
支持的压缩算法:
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 不压缩。
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] a=[0|1|2] 设置压缩等级:0=快速、1=正常、2=最大压缩。默认值为 1。 d={Size}[b|k|m] 设 置 LZMA 压缩算法的字典大小。您可以使用字节、KB 或 MB 来指定此项。字典大小的最大值为 256 MB=2^28 字节。正常模式下,LZMA 的字典大小默认值为 21(2 MB) ;最大模式(-mx=7)下为 23(8 MB);极限模式(-mx=9)下为 25(32 MB)。如果您未指定 [b|k|m] 项,字典大小将自动根据压缩等级来选择相应的单位。对于 LZMA 算法的文件解压缩,若压缩文件的字典大小为 64 MB,则解压缩时就需要 64 兆可用的物理内存。
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 可用物理内存。
fb={N}
设置 LZMA 压缩算法的紧缩字节。有效范围从 5 到 255。正常模式下默认值为 32;最大模式下为 64 。通常情况下,较大的数值能略微提高压缩比。但同时也会降低压缩速度。
lc={N}
设置 Literal Context 位数。有效范围从 0 到 8。默认值为 3。有时压缩档案中含有大文件会自动使用 lc=4。
lp={N}
设置 Literal Pos 位数。有效范围从 0 到 4。默认值为 0。
pb={N}
设置 Pos 位数。有效范围从 0 到 4。默认值为 2。
PPMd
PPMd 是 PPM-based 压缩算法的简写。它基于 Dmitry Shkarin 的算法 PPMdH 并对其源代码加以优化。PPMd 通常能对纯文本提供高压缩比及较快的解压缩速度。压缩和解压缩的速度完全相同,所需的内存大小也一样。
参数 默认值 说明
mem={Size}[b|k|m] 24 设置 PPMd 算法使用内存。
o={Size} 6 设置 PPMd 算法压缩命令。
mem={Size}[b|k|m]
设 置 PPMd 算法使用的内存多少。您可以使用字节、KB 或 MB 来指定此项。最大值为 2 GB=2^31 字节;默认值为 24(16MB)。如果您未指定 [b|k|m] 项,字典大小将自动根据压缩等级来选择相应的单位。PPMd 在压缩和解压缩时所需的内存大小是相同的。
o={Size}
设置 PPMd 算法压缩命令。其大小必须在 [2,32] 范围内。默认值为 6。
BCJ2
BCJ2 是 32 位 x86 可执行文件转换器(第二版)。它通过转换分支指令来对文件进行进一步压缩。
BCJ2 编码器有一个输入流和四个输出流:
s0:干流。提供进一步的压缩。
s1:CALL 值转换流。提供进一步的压缩。
s2:JUMP 值转换流。提供进一步的压缩。
s3:服务流。它已经备压缩过。
如果使用 LZMA 压缩算法,s1 及 s2 流的字典大小将会比 s0 流的小(512 KB)。
|
示例
1 2 3 4
| 7z a -tzip archive.zip *.jpg -m0 #不压缩而直接将 *.jpg 文件添加到 archive.zip 档案。 7z a -t7z archive.7z *.exe *.dll -m0=BCJ -m1=LZMA:d=21 -ms -mmt #添加 *.exe 及 *.dll 文件到固实压缩档案 archive.7z。使用 LZMA 压缩算法、2 MB 字典大小及 BCJ 转换器。压缩将开启多线程优化(如果可用)。 7z a -t7z archive.7z *.exe *.dll -m0=BCJ2 -m1=LZMA:d23 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1 -mb0s1:2 -mb0s2:3 #添加 *.exe 及 *.dll 文件到压缩档案 archive.7z。使用 LZMA 压缩算法、BCJ2 转换器、为主输出流(s0)使用 8 MB 字典大小、LZMA 算法为 BCJ2 转换器的 s1 及 s2 输出流使用 512 KB 字典大小。 7z a -t7z archive.7z *.txt -m0=PPMd #添加 *.txt 文件到压缩档案 archive.7z。 使用 PPMd 压缩算法。
|