如何在命令行上使用 7-zip 9.20 启用多线程 LZMA2?

如何在命令行上使用 7-zip 9.20 启用多线程 LZMA2?

如何在命令行上使用 7-zip 9.20 启用多线程 LZMA2?我知道这通常是通过 -t 选项完成的,如下所示:“-tzip”。

我该如何使用 LZMA2 来实现这一点?我尝试了 -tlzma 和 -tlzma2,但都不起作用。我还尝试过根本不传递 -t,它只是以“lzma”模式单线程运行。

这是我当前拥有的命令,但它很慢并且是单线程的:

"C:\Program Files\7-Zip\7z.exe" a -r -tzip -y XMLBackup.zip *.xml

答案1

尝试-m0=lzma2

"C:\Program Files\7-Zip\7z.exe" a -m0=lzma2 -r -y XMLBackup.zip *.xml

更多信息

答案2

帮助文件说它是 mt=number_of_threads

我知道这专门针对命令行,但有一点我可以说,关于使用 GUI,只要切换到 LMZA2,您就会获得所有选项。而且它确实大大加快了压缩速度,充分利用了 100% 的 CPU 能力,而不是通常的 25%。

答案3

7z a -txz -mx=9 -mmt=on out.tar.xz in.tar

-txz使用 XZ (LZMA2)

-mx=9设置压缩级别(1 最快/9 最佳压缩)

-mmt=onLZMA2 仅支持最多 2 个线程( 或-mmt=on-mmt=off,但on默认为多线程

https://sevenzip.osdn.jp/chm/cmdline/switches/method.htm#XZ

答案4

截至 2023 年:默认命令似乎利用了我所有的核心(32 核 AMD CPU)并使用最大压缩。

当我的文件夹里只有一个文件时,CPU 使用率很低。如果有很多大文件,CPU 使用率就会超过 50%。我认为这解释了为什么有些人认为它不起作用?

我使用以下 PowerShell 脚本将所有子目录压缩到它们自己的 7z 档案中。 例如:它需要一个包含子文件夹的目录:A、B、C,并输出:A.7z、B.7z、C.7z 您可以在最后一行看到实际的 7zip 命令,除了详细日志记录之外我没有设置其他标志, -bsp1并且最终在需要时使用我的所有核心。

$rootDir = Get-Location # Can select the parent dir here
$7zipPath = "7z.exe" # Replace with the path to 7zip if not in PATH

Get-ChildItem -Path $rootDir -Directory | ForEach-Object {
    $folderName = $_.Name
    $outputFile = Join-Path $rootDir "$folderName.7z"
    & $7zipPath a -bsp1 $outputFile $_.FullName
}

相关内容