2009-08-31 7 views
22

PROBLEMA: Me gustaría poder extraer archivos tar.gz en un solo paso. Esto hace que mi pregunta sea casi idéntica a esta: stackoverflow question for tar-gz.extrae programáticamente tar.gz en un solo paso (en Windows con 7zip)

Mi pregunta es casi lo mismo, pero no es lo mismo, porque me gustaría hacer esto en Windows utilizando la línea de comandos 7zip (o algo similar) dentro de un archivo bat o Ruby/Perl/script en Python.

PREGUNTA: Esta tarea aparentemente simple está demostrando ser más complicada de lo que parecería ser la primera aparición. ¿Alguien tiene un script que hace esto ya?

+6

votado para mover a superuser.com, ya que no es exactamente la programación -relacionado. –

+1

@AndyWhite Como OP quiere hacer esto usando un script bat/ruby ​​/ perl/python, y un script puede considerarse un programa pequeño, la pregunta está relacionada con la programación. – HelloGoodbye

Respuesta

25
7z e example.tar.gz && 7z x example.tar 

Uso && para combinar dos comandos en un solo paso. Use 7zip portable (solo necesitará 7z.exe y 7z.dll)

+9

Esto no es exactamente un paso. Todavía está haciendo el paso gzip primero, dejando un archivo tar potencialmente muy grande alrededor. – bug

5

Como solicitó 7-zip o algo similar, proporciono una herramienta alternativa que se escribió para su caso de uso exacto.

La utilidad tartool (http://tartool.codeplex.com/) es una herramienta de código abierto y gratuito creada con la biblioteca .NET SharpZipLib.

Ejemplo commmand para extraer un .tar.gz (o .tgz) archivo,

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

responsabilidad: yo soy el autor de esta utilidad.

53

Pregunta anterior, pero hoy tuve problemas con ella, así que aquí está mi 2c. La herramienta de línea de comandos 7zip "7z.exe" (He instalado v9.22) se puede escribir en la salida estándar y leer de la entrada estándar por lo que se puede hacer sin el archivo tar intermedia mediante el uso de un tubo:

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

Dónde:

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 

Consulte el archivo de ayuda (7-zip.chm) en el directorio de instalación para obtener más información sobre los comandos e interruptores de la línea de comando.

Como noted por @zespri powershell almacenará en búfer la entrada al segundo proceso 7z, por lo que puede consumir mucha memoria si su archivo tar es grande. es decir:

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

Una solución de this SO answer si quiere hacerlo desde PowerShell es para pasar los comandos para cmd.exe:

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

¡buena solución para mí! Gracias. – holly

+5

un consejo: si lo ejecuta en Windows, y su archivo es grande, no ejecute esto en PowerShell, sino que lo absorberá todo en memoria en lugar de transmitir. abra el indicador de cmd y ejecútelo desde allí. –

+0

Esto es asombroso. (Tenga en cuenta que cuando lo probé (v15.12), creó el archivo tar en el directorio de trabajo, pero lo eliminó cuando lo hizo) – Dave

Cuestiones relacionadas