archivierte .bz2-Dateien mit einem einzigen Befehl aus einem .tar-Archiv extrahieren

1163
FlyingMGET

Ich muss .bz2-Dateien in einem .tar-Archiv dekomprimieren (zweistufige Dekomprimierung)

Zum Beispiel:

request_files_1.tar

enthält mehrere .bz2-Dateien.

Wie kann ich sie mit einem einzigen Befehl in Linux extrahieren? Ich habe es versucht, aber es funktioniert nicht.

tar -xvf angeforderte_Dateien_1.tar | bzip2 -d

1

2 Antworten auf die Frage

1
Achilleas

Ihre Pipe funktioniert nicht, weil tar die Dateien nicht in stdout extrahiert, sondern nur auflistet. bzip2 versucht daher, die Liste der Dateinamen als Klartext zu dekomprimieren, was natürlich nicht der Inhalt einer komprimierten Datei ist (dh es wird der Klartext als Inhalt der zu extrahierenden Datei verwendet).

Um die Ausgabe von zu verwenden, tar xvfals eine Liste von Dateinamen für bzip2zu extrahieren, können Sie wie folgt vorgehen:

bzip2 -d $(tar xvf requested_files_1.tar) 

Die vOption tarhier ist erforderlich, um die extrahierten Dateien für bzip2 aufzulisten.

Dies ist der perfekte und effizienteste Code. Es hat einwandfrei funktioniert. Es war sogar noch besser, wenn ich eine for-Schleife in die Klammer steckte und es für alle tar-Dateien in diesem Verzeichnis ausführte. Danke noch einmal. > bzip2 -d $ (für i in * .tar; mach tar xvf $ i; done) FlyingMGET vor 10 Jahren 0
0
Dude named Ben

Klingt nach einem Duplikat von

https://unix.stackexchange.com/questions/4367/extracting-nested-zip-files

Dein Skript würde also so aussehen:

#!/bin/sh  for f in `ls *.tar` ; do dir="$" mkdir "$dir" cd $dir tar -xf "../$f" bunzip2 *.bz2 cd .. done