windows - 在 windows 中使用命令行提取 .tar.gz

标签 windows cmd gzip 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"

提取时效果很好,但整个过程中进度仍然为 0%(我尝试从 cmd 运行),我认为这是因为流输入和输出。

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

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

最佳答案

很多程序员都安装了Git for Windows .它带有一个很好的 Bash 环境,其中还包含 GNU tar。使用常规的 tar 命令,您可以轻松地使用 checking progress 的选项,尤其是 --checkpoint and --checkpoint-action options .和他们一起玩,你可以用他们做一些好事,从简单的事情,比如

tar --checkpoint=1 --checkpoint-action=dot -xzf my-archive.tar.gz
tar --checkpoint=1 --checkpoint-action=echo -xzf my-archive.tar.gz

更高级的东西,比如

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

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

关于windows - 在 windows 中使用命令行提取 .tar.gz,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42379939/

相关文章:

cmd - 在没有密码提示的情况下从脚本调用 mysqldump

windows - 禁止使用 DIR 列出目录名称

linux - gzip 文件夹的总大小

javascript - Safari:使用 GZIP 时为 "Cannot decode raw data"

Windows Mobile 6.5 C# 开发 : Where to start?

c# - 在 Windows 资源管理器中显示 Windows 搜索结果

batch-file - 如何避免执行批处理后cmd将被关闭?

windows - 将 tar/gzip 添加到 Windows 命令行

windows - Linux Powershell 客户端

c++ - IWebBrowser2.Document 不返回 IHTMLDocument2