Programmatically extract tar.gz in a single step (on Windows with 7-Zip)
Asked Answered
C

5

40

Problem: I would like to be able to extract tar.gz files in a single step. This makes my question almost identical to this one: Stack Overflow question for tar-gz.

My question is almost the same, but not the same, because I would like to do this on windows using 7-Zip command-line (or something similar) inside a bat file or Ruby/Perl/Python script.

Question: This seemingly simple task is proving to be more involved than the first appearance would make it out to be. Does anyone have a script that does this already?

Christcrossrow answered 31/8, 2009 at 23:1 Comment(1)
Related on superuser.comWesleyanism
O
33
7z e example.tar.gz  && 7z x example.tar

Use && to combine two commands in one step. Use the 7-Zip portable (you will need 7z.exe and 7z.dll only).

Overby answered 25/5, 2010 at 9:45 Comment(2)
This isn't exactly one step. It's still doing the gzip step first, leaving a potentially very large tar file around.Amabil
see https://mcmap.net/q/389575/-programmatically-extract-tar-gz-in-a-single-step-on-windows-with-7-zip (answere from @senthil ) to have a single handy solution ; )Luisluisa
Z
87

Old question, but I was struggling with it today so here's my 2c. The 7zip commandline tool "7z.exe" (I have v9.22 installed) can write to stdout and read from stdin so you can do without the intermediate tar file by using a pipe:

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

Where:

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

See the help file (7-zip.chm) in the install directory for more info on the command line commands and switches.

As noted by @zespri powershell will buffer the input to the second 7z process so can consume a lot of memory if your tar file is large. i.e:

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

A workaround from this SO answer if you want to do this from powershell is to pass the commands to cmd.exe:

& cmd.exe '/C 7z x "somename.tar.gz" -so | 7z x -aoa -si -ttar -o"somename"'
Zooplankton answered 5/2, 2013 at 3:21 Comment(3)
a word of advise: if you running it on windows, and your archive is large do not run this under powershell - it will suck the whole thing into memory instead of streaming. open cmd prompt and run it from there.Bunin
This is awesome. (Note that when I tried it (v15.12), it created the tar file in the working directory, but deleted it when it was done)Rubel
@Rubel That doesn't happen for me in 15.11. Were you running it directly in a cmd prompt or in powershell with the cmd workaround?Zooplankton
O
33
7z e example.tar.gz  && 7z x example.tar

Use && to combine two commands in one step. Use the 7-Zip portable (you will need 7z.exe and 7z.dll only).

Overby answered 25/5, 2010 at 9:45 Comment(2)
This isn't exactly one step. It's still doing the gzip step first, leaving a potentially very large tar file around.Amabil
see https://mcmap.net/q/389575/-programmatically-extract-tar-gz-in-a-single-step-on-windows-with-7-zip (answere from @senthil ) to have a single handy solution ; )Luisluisa
C
13

Use the win32 port of tar.

tar -xvfz filename.tar.gz
Chaffinch answered 31/8, 2009 at 23:6 Comment(1)
lately you must run bsdtar instead of tar but still a great idea and simpler than using 7zipSihonn
K
9

Since you asked for 7-zip or something similar, I am providing an alternative tool that was written for your exact use case.

The tartool utility is a free and open source tool built using the .NET SharpZipLib library.

Example commmand to extract a .tar.gz / .tgz - file,

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

Disclaimer : I am the author of this utility.

Klimesh answered 7/9, 2012 at 15:55 Comment(0)
D
0

As you can see 7-Zip is not very good at this. People have been asking for tarball atomic operation since 2009. As an alternative, you can use the Arc program. Example command:

arc unarchive test.tar.gz
Drue answered 13/1, 2021 at 16:22 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.