以编程方式一步提取tar.gz(在7zip的Windows上)

dre*_*mac 34 scripting gzip 7zip tar archive

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

我的问题是几乎相同的,但不一样的,因为我想做到这一点,使用7zip的命令行(或类似的东西)一个bat文件或红宝石/的Perl/Python脚本内的窗口.

问题:这个看似简单的任务证明比第一次出现更具参与性.有没有人有一个脚本可以做到这一点?

use*_*856 80

老问题,但我今天正在努力,所以这是我的2c.该7zip的命令行工具"7z.exe"(我已经安装v9.22)可以写入stdout和标准输入读取,所以你可以通过使用管道无需中间的tar文件做:

7z x "somename.tar.gz" -so | 7z x -aoa -si -ttar -o"somename"
Run Code Online (Sandbox Code Playgroud)

哪里:

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
Run Code Online (Sandbox Code Playgroud)

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

正如指出@zespri的PowerShell将输入缓冲器的第二7Z过程中,如果您的tar文件较大,因此会消耗大量的内存.即:

& 7z x "somename.tar.gz" -so  | & 7z x -aoa -si -ttar -o"somename"
Run Code Online (Sandbox Code Playgroud)

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

& cmd.exe '/C 7z x "somename.tar.gz" -so | 7z x -aoa -si -ttar -o"somename"'
Run Code Online (Sandbox Code Playgroud)

  • 建议的一句话:如果你在Windows上运行它,你的存档很大,不要在powershell下运行它 - 它会将整个内容吸入内存而不是流式传输.打开cmd提示符并从那里运行它. (9认同)

sva*_*agt 30

7z e example.tar.gz  && 7z x example.tar
Run Code Online (Sandbox Code Playgroud)

使用&&两个命令在一个步骤结合起来.使用7zip portable(你只需要7z.exe和7z.dll)

  • 这不是一步.它仍然首先执行gzip步骤,留下一个可能非常大的tar文件. (12认同)

sen*_*hil 8

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

tartool程序是使用.NET SharpZipLib库建立一个自由和开放源码工具.

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

C:\>TarTool.exe D:\sample.tar.gz ./
Run Code Online (Sandbox Code Playgroud)

免责声明:我是该实用程序的作者.