Scripting 以编程方式一步提取tar.gz(在使用7-Zip的Windows上)

Scripting 以编程方式一步提取tar.gz(在使用7-Zip的Windows上),scripting,gzip,archive,tar,7zip,Scripting,Gzip,Archive,Tar,7zip,问题:我希望能够一步提取tar.gz文件。这使我的问题几乎与这个问题相同: 我的问题几乎是一样的,但不一样,因为我想在windows上使用bat文件或Ruby/Perl/Python脚本中的7-Zip命令行(或类似命令行)来实现这一点 问题:事实证明,这项看似简单的任务比第一次出现时要复杂得多。有人已经有了这样的脚本吗?使用 使用&&在一个步骤中组合两个命令。使用7-Zip便携工具(您只需要7z.exe和7z.dll)。既然您要求使用7-Zip或类似工具,我将提供一个为您的确切用例编写的替代工具

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

我的问题几乎是一样的,但不一样,因为我想在windows上使用bat文件或Ruby/Perl/Python脚本中的7-Zip命令行(或类似命令行)来实现这一点

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

使用


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

既然您要求使用7-Zip或类似工具,我将提供一个为您的确切用例编写的替代工具

是一个使用.NET SharpZipLib库构建的免费开源工具

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

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

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

老问题,但我今天一直在努力解决它,所以这里是我的2c。7zip命令行工具“7z.exe”(我已经安装了v9.22)可以写入stdout并从stdin中读取,因此您可以使用管道不使用中间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)

由于powershell将缓冲第二个7z进程的输入,因此如果tar文件较大,可能会消耗大量内存。i、 e:

& 7z x "somename.tar.gz" -so  | & 7z x -aoa -si -ttar -o"somename"
如果要从powershell执行此操作,可以通过将命令传递到cmd.exe:

& cmd.exe '/C 7z x "somename.tar.gz" -so | 7z x -aoa -si -ttar -o"somename"'

正如你所看到的,7-Zip在这方面并不擅长。人们已经 自2009年以来,塔尔鲍尔核电站开始运行。作为替代方案,您可以使用 . 命令示例:

arc unarchive test.tar.gz

投票决定转到superuser.com,因为它与编程无关。@AndyWhite因为OP希望使用bat/ruby/perl/python脚本来实现这一点,而脚本可以被认为是一个小程序,所以问题是与编程有关。这不是一个确切的步骤。它仍在首先执行gzip步骤,留下一个可能非常大的tar文件。请参见(answere from@senthil)以获得一个简单的解决方案;)一句忠告:如果你在windows上运行它,并且你的归档文件很大,不要在powershell下运行它-它会将整个内容吸入内存,而不是流式处理。打开cmd提示符并从那里运行它。这太棒了。(请注意,当我尝试它(v15.12)时,它在工作目录中创建了tar文件,但在完成后将其删除)@Dave在15.11中我没有这样做。您是直接在cmd提示符下运行它,还是在powershell中使用cmd解决方案运行它?最近您必须运行bsdtar而不是tar,但这仍然是一个好主意,而且比使用7zip更简单
& cmd.exe '/C 7z x "somename.tar.gz" -so | 7z x -aoa -si -ttar -o"somename"'
arc unarchive test.tar.gz