Sör*_*lau 11 compression command-line 7-zip
7z 命令行工具允许您指定多种压缩方法,例如:
# 7-zip archive type, strongest (9) compression, methods PPMd, BCJ2, LZMA2
$ 7z a -t7z -mx=9 -m0=PPMd -m1=BCJ2 -m2=LZMA2 myarchive.7z somefile.xml
Run Code Online (Sandbox Code Playgroud)
所有方法都以某种方式使用,或者至少在元数据中指定:
$ 7z l -slt myarchive.7z
7-Zip [64] 9.22 beta Copyright (c) 1999-2011 Igor Pavlov 2011-04-18
Listing archive: myarchive.
7z
--
Path = myarchive.7z
Type = 7z
Method = LZMA2 PPMD BCJ2
[..]
----------
Path = somefile.xml
[..]
Method = PPMD:o32:mem192m BCJ2 LZMA2:48m
Block = 0
Run Code Online (Sandbox Code Playgroud)
它似乎没有通过所有三种方法运行文件,选择最好的。相反,它显然总是选择第一个,因为更改方法的顺序会显着影响文件大小。
即使我添加了多个文件,例如一个 XML 文件(PPMd 产生最佳压缩)和一个二进制文件(LZMA2 可以),它仍会列出这两个文件的所有方法,并且似乎不会针对每个文件动态切换。
事实上,文档特别说明“您可以使用任意数量的方法。”,但并没有说明为什么。
我想要实现的是每个文件“尝试多种方法,选择最好的”存档。我当然可以通过一些脚本手动实现这一点,但据推测,链接压缩方法应该完全做到这一点?
通常,压缩数据不能被有效地(进一步)压缩。应用第一种压缩方法后,文件大小无法显着减小。
将-mN=X主要用于指定过滤器(从Windows帮助文件中获取):
支持的过滤器:
Delta Delta 过滤器(“可以以字节为单位设置增量偏移。例如,要压缩 16 位立体声 WAV 文件,您可以设置“0=Delta:4”。默认增量偏移为 1。”)
x86 可执行文件的BCJ转换器
用于 x86 可执行文件(版本 2)的BCJ2转换器(“BCJ2 是用于 32 位 x86 可执行文件(版本 2)的分支转换器。它转换一些分支指令以增加进一步压缩。”)
用于 ARM(小端)可执行文件的ARM转换器
用于 ARM Thumb(小端)可执行文件的ARMT转换器
IA-64 可执行文件的IA64转换器
用于 PowerPC(大端)可执行文件的PPC转换器
用于 SPARC 可执行文件的SPARC转换器
同样来自帮助文件,一个利用 BCJ2 过滤器的多个输出流的高级示例:
Run Code Online (Sandbox Code Playgroud)7z a -t7z archive.7z *.exe *.dll -m0=BCJ2 -m1=LZMA:d23 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1 -mb0s1:2 -mb0s2:3使用 BCJ2 转换器将 *.exe 和 *.dll 文件添加到存档 archive.7z,LZMA 带有 8 MB 字典用于主输出流 (s0),LZMA 带有 512 KB 字典用于 BCJ2 的 s1 和 s2 输出流。
| 归档时间: |
|
| 查看次数: |
3766 次 |
| 最近记录: |