在 Windows 中通过命令行提取 .tar.gz 有进度

Fra*_*sca 2 windows gzip cmd extract tar

我正在尝试使用命令行在 Windows 中提取 tar.gz 文件并获取进度百分比。首先,我希望通过一次操作来提取它(而不是提取 tar 然后解压缩)。我发现唯一可以做到这一点的两个工具是Tartool和 7zip。Tartool 很好(也很容易检测错误),但没有进展。7zip你必须使用strem in和out,所以我创建了一个基本的bat文件:

cd /d %~dp0
7z.exe x "%1" -so | 7z.exe x -aoa -si -ttar -o"%2"
Run Code Online (Sandbox Code Playgroud)

它与提取工作正常,但在整个过程中进度仍然为 0%(我尝试从 cmd 运行),我认为这是因为流输入和输出。

我知道即使在执行此操作(提取 tgz 文件)时,winrar 也可以显示进度百分比,那么我怎样才能获得相同的结果呢?

我能达到的最接近目标是获取输出目录大小并除以 tar.gz 文件的未压缩大小(通过 7z.exe l 函数获得)。而且进度不是线性的,它仅在提取文件时发生变化(例如,如果我的 targz 包含 2 个非常大的文件,则在提取过程中我只能获得 0%、50% 和 100%)

kri*_*aex 7

许多程序员已经安装了Windows 版的 Git。它带有一个良好的 Bash 环境,其中还包含 GNU tar。使用常规 tar 命令,您可以轻松使用选项来检查进度,尤其是--checkpoint--checkpoint-action选项。和他们一起玩,你可以和他们一起做一些好事,从简单的事情开始,比如

tar --checkpoint=1 --checkpoint-action=dot -xzf my-archive.tar.gz
tar --checkpoint=1 --checkpoint-action=echo -xzf my-archive.tar.gz
Run Code Online (Sandbox Code Playgroud)

更高级的东西,比如

tar --checkpoint=1 --checkpoint-action="ttyout=Hit %s checkpoint #%u%*\r" -xzf my-archive.tar.gz
tar --checkpoint=1 --checkpoint-action=ttyout='%{%Y-%m-%d %H:%M:%S}t (%d sec): #%u, %T%*\r' -xzf my-archive.tar.gz
Run Code Online (Sandbox Code Playgroud)

如果您不喜欢滚动消息,但输出会在线更新 - 或者您喜欢的任何内容。您甚至可以运行任何您喜欢的 shell 命令。