【问题标题】:Programmatically extract tar.gz in a single step (on Windows with 7-Zip)以编程方式一步提取 tar.gz(在 7-Zip 的 Windows 上)
【发布时间】:2010-11-24 11:49:12
【问题描述】:

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

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

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

【问题讨论】:

  • 投票支持迁移到 superuser.com,因为它与编程不完全相关。
  • @AndyWhite 既然OP想用bat/ruby/perl/python脚本来做这个,而且脚本可以认为是一个小程序,问题是编程相关的。

标签: scripting gzip archive tar 7zip


【解决方案1】:

老问题,但我今天遇到了困难,所以这是我的 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)。

作为@zesprinoted,powershell 会将输入缓冲到第二个7z 进程,因此如果您的tar 文件很大,可能会消耗大量内存。即:

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

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

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

【讨论】:

  • 忠告:如果您在 Windows 上运行它,并且您的存档很大,请不要在 powershell 下运行它 - 它会将整个内容吸入内存而不是流式传输。打开 cmd 提示符并从那里运行它。
  • 这太棒了。 (注意,当我尝试(v15.12)时,它在工作目录中创建了tar文件,但完成后将其删除)
  • @Dave 这在 15.11 中不会发生在我身上。您是直接在 cmd 提示符下运行它还是在 powershell 中使用 cmd 解决方法?
【解决方案2】:
7z e example.tar.gz  && 7z x example.tar

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

【讨论】:

  • 这不是一步。它仍然先执行 gzip 步骤,留下一个可能非常大的 tar 文件。
  • stackoverflow.com/a/12321558/5612605(来自@senthil 的回答)有一个方便的解决方案; )
【解决方案3】:

使用win32 port of tar

tar -xvfz filename.tar.gz

【讨论】:

  • 最近你必须运行 bsdtar 而不是 tar 但仍然是一个好主意并且比使用 7zip 更简单
【解决方案4】:

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

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

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

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

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

【讨论】:

    【解决方案5】:

    如您所见,7-Zip 在这方面并不是很擅长。人们已经asking for 自 2009 年以来的 tarball 原子操作。作为替代方案,您可以使用 Arc program。示例命令:

    arc unarchive test.tar.gz
    

    【讨论】:

      猜你喜欢
      • 2023-03-26
      • 1970-01-01
      • 2013-04-12
      • 1970-01-01
      • 2014-05-24
      • 1970-01-01
      • 2017-03-03
      • 2014-01-27
      • 1970-01-01
      相关资源
      最近更新 更多