如何在命令行上使用 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
答案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=on
LZMA2 仅支持最多 2 个线程( 或-mmt=on
)-mmt=off
,但on
默认为多线程
答案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
}