38

问题:我希望能够一步提取 tar.gz 文件。这使我的问题几乎 与这个问题相同:Stack Overflow question for tar-gz

我的问题几乎相同,但不一样,因为我想在 bat 文件或 Ruby/Perl/Python 脚本中使用 7-Zip 命令行(或类似的东西)在 Windows 上执行此操作。

问题:事实证明,这个看似简单的任务比第一次出现要复杂得多。有没有人有一个已经这样做的脚本?

4

5 回答 5

85

老问题,但我今天正在努力解决这个问题,所以这是我的 2c。7zip 命令行工具“7z.exe”(我安装了 v9.22)可以写入标准输出并从标准输入读取,因此您可以使用管道无需中间 tar 文件:

7z x "somename.tar.gz" -so | 7z x -aoa -si -ttar -o"somename"

在哪里:

x     = Extract with full paths command
-so   = write to stdout switch
-si   = read from stdin switch
-aoa  = Overwrite all existing files without prompt.
-ttar = Treat the stdin byte stream as a TAR file
-o    = output directory

有关命令行命令和开关的更多信息,请参阅安装目录中的帮助文件 (7-zip.chm)。

正如@zespri所指出的,powershell 会将输入缓冲到第二个 7z 进程,因此如果您的 tar 文件很大,则会消耗大量内存。IE:

& 7z x "somename.tar.gz" -so  | & 7z x -aoa -si -ttar -o"somename"

如果您想从 powershell 执行此操作,则此 SO 答案的解决方法是将命令传递给 cmd.exe:

& cmd.exe '/C 7z x "somename.tar.gz" -so | 7z x -aoa -si -ttar -o"somename"'
于 2013-02-05T03:21:42.227 回答
34
7z e example.tar.gz  && 7z x example.tar

用于&&在一个步骤中组合两个命令。使用 7-Zip 便携版(您只需要 7z.exe 和 7z.dll)。

于 2010-05-25T09:45:12.753 回答
13

使用tar 的 win32 端口

tar -xvfz filename.tar.gz
于 2009-08-31T23:06:43.703 回答
8

由于您要求 7-zip 或类似的东西,我提供了一个为您的确切用例编写的替代工具。

tartool实用程序是使用 .NET SharpZipLib 库构建的免费开源工具。

提取.tar.gz/ .tgz- 文件的示例命令,

C:\>TarTool.exe D:\sample.tar.gz ./

免责声明:我是这个实用程序的作者。

于 2012-09-07T15:55:19.800 回答
0

如您所见,7-Zip 在这方面并不是很擅长。自 2009 年以来,人们一直在要求 tarball 原子操作。作为替代方案,您可以使用 Arc 程序。示例命令:

arc unarchive test.tar.gz
于 2021-01-13T16:22:20.040 回答