问题:我希望能够一步提取 tar.gz 文件。这使我的问题几乎 与这个问题相同:Stack Overflow question for tar-gz。
我的问题几乎相同,但不一样,因为我想在 bat 文件或 Ruby/Perl/Python 脚本中使用 7-Zip 命令行(或类似的东西)在 Windows 上执行此操作。
问题:事实证明,这个看似简单的任务比第一次出现要复杂得多。有没有人有一个已经这样做的脚本?
老问题,但我今天正在努力解决这个问题,所以这是我的 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"'
7z e example.tar.gz && 7z x example.tar
用于&&
在一个步骤中组合两个命令。使用 7-Zip 便携版(您只需要 7z.exe 和 7z.dll)。
tar -xvfz filename.tar.gz
由于您要求 7-zip 或类似的东西,我提供了一个为您的确切用例编写的替代工具。
tartool实用程序是使用 .NET SharpZipLib 库构建的免费开源工具。
提取.tar.gz
/ .tgz
- 文件的示例命令,
C:\>TarTool.exe D:\sample.tar.gz ./
免责声明:我是这个实用程序的作者。