web-dev-qa-db-fra.com

Extraire tar.gz par programme en une seule étape (sous Windows avec 7-Zip)

Problème: Je voudrais pouvoir extraire des fichiers tar.gz en une seule étape. Cela rend ma question presque identique à celle-ci: question Stack Overflow pour tar-gz .

Ma question est presque la même chose, mais pas la même, car je voudrais le faire sur Windows en utilisant la ligne de commande 7-Zip (ou quelque chose de similaire) dans un fichier bat ou Ruby/Perl/Script Python.

Question: Cette tâche apparemment simple s'avère être plus impliquée que la première apparition ne le ferait. Quelqu'un at-il un script qui le fait déjà?

35
dreftymac
7z e example.tar.gz  && 7z x example.tar

Utilisation && pour combiner deux commandes en une seule étape. Utilisez le portable 7-Zip (vous aurez besoin de 7z.exe et 7z.dll uniquement).

30
svandragt

Vieille question, mais je me débattais avec elle aujourd'hui alors voici mon 2c. L'outil de ligne de commande 7Zip "7z.exe" (j'ai installé v9.22) peut écrire sur stdout et lire à partir de stdin afin que vous puissiez vous passer du fichier tar intermédiaire en utilisant un tube:

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

Où:

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

Consultez le fichier d'aide (7-Zip.chm) dans le répertoire d'installation pour plus d'informations sur les commandes et commutateurs de ligne de commande.

Comme noté par @ zespri powershell mettra en mémoire tampon l'entrée du deuxième processus 7z et peut donc consommer beaucoup de mémoire si votre fichier tar est volumineux. c'est à dire:

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

Une solution de contournement de this SO answer si vous voulez le faire à partir de powershell est de passer les commandes à cmd.exe:

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

Utilisez le port win32 de tar .

tar -xvfz filename.tar.gz
13
Byron Whitlock

Puisque vous avez demandé 7-Zip ou quelque chose de similaire, je propose un outil alternatif qui a été écrit pour votre cas d'utilisation exact.

tilitaire tartool est un outil gratuit et open source construit à l'aide de la bibliothèque .NET SharpZipLib.

Exemple de commande pour extraire un .tar.gz/.tgz - fichier,

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

Avertissement: je suis l'auteur de cet utilitaire.

8
senthil