问题
我怎样才能告诉 7-Zip(特别是命令行版本7z
)我只想禁用 ARM64 过滤器,但所有其他过滤器都是可以接受的?
我现在的目标是禁用新版本 7-Zip 中的 ARM64 过滤器,以保持与旧版本 7-Zip 的兼容性。
背景
7-Zip 23.00 引入了针对同名架构的二进制文件的 ARM64 过滤器。摘自历史.txt:
23.00 2023-05-07
- 7-Zip 现在可以使用新的 ARM64 过滤器来压缩 7z 和 xz 档案。ARM64 过滤器可以提高包含针对 ARM64 (AArch64) 架构编译的可执行文件的数据的压缩率。此外,7-Zip 现在会在压缩之前解析可执行文件(具有 exe 和 dll 文件扩展名),并为每个解析的文件选择适当的过滤器:
- 用于 x86 可执行文件的 BCJ 或 BCJ2 过滤器,
- ARM64 过滤器适用于 ARM64 可执行文件。以前的版本默认对所有 exe/dll 文件使用 x86 过滤器 BCJ 或 BCJ2。
这实际上引入了向后不兼容性。每当要求旧版本的 7-Zip 处理使用 23.00 或更新版本创建的文件时和包含 ARM64 二进制文件,输出将如下所示:
Method = 0A LZMA2:26 LZMA:20 BCJ2 ARMT
...而在新版本中我们可以看到,其0A
含义为ARM64
:
Method = ARM64 LZMA2:26 LZMA:20 BCJ2 ARMT
我尝试过的和“基准”
我-mf=BCJ2
可以告诉它使用只指定的过滤器或-mf=off
我可以关闭所有过滤器,似乎都不是我所想要的。关闭所有过滤器意味着压缩率更差。仅打开特定过滤器到处意味着压缩速度较慢。
比较(所有测试的文件系统缓存均已预先填充):
- 与之前一样切换:yield
Method = ARM64 LZMA2:26 LZMA:20 BCJ2 ARMT
,耗时 36.620 秒,大小为 115454049 字节 (111 MiB)-t7z -mx=9 -myx=7 -mmt=on -mmtf=on -ms=on -mqs=on -mtm=off -mtc=off -mta=off -mtr=off -stl
- 附加
-mf=off
:产量Method = LZMA2:26
,在 37.692 秒内,大小为 116861788 字节(112 MiB) - 附加
-mf=BCJ2
:产量Method = LZMA2:26 LZMA:20 BCJ2
,在 36.031 秒内,大小为 115483281 字节(111 MiB)
显然,对于我的例子(这是我实际尝试的一个较小的子集),有无之间的大小和性能差异-mf=BCJ2
足够小。但对于我处理的实际数据大小,我们进入了这些相加的区域。