Wenn Sie schreiben:
tar -xf *.gz
der tar
Befehl sieht (zum Beispiel):
tar -xf abc.tar.gz def.tar.gz ghi.tar.gz
Dies wird als Aufforderung interpretiert, def.tar.gz
zu extrahieren und ghi.tar.gz
aus dem Archiv abc.tar.gz
. Da die Dateien dort nicht enthalten sind, erhalten Sie die Warnmeldung.
Mit anderen Worten, tar
arbeitet auf einem einzigen tar
Datei (möglicherweise komprimiert) gleichzeitig (in einem Aufruf). Es funktioniert nicht mit mehreren tar-Dateien.
Beachten Sie, dass wenn abc.tar.gz
enthält eine Datei pqr/xyz/important.c
, können Sie nur eine Datei extrahieren, indem Sie Folgendes angeben:
tar -xf abc.tar.gz pqr/xyz/important.c
Die von Ihnen verwendete Notation ist nur eine Variante dieser Notation.
(Und ja, es kann Gründe für tar
geben ein tar
Datei. Gmail erlaubt Ihnen beispielsweise nicht, eine TAR-Datei oder eine gzip-gepackte TAR-Datei zu versenden, die eine ausführbare Datei enthält. Wenn Sie jedoch eine gzippte tar-Datei in eine nicht komprimierte tar-Datei einbetten, wird nicht in der inneren Datei nach der ausführbaren Datei gesucht. Ich verwende dies, wenn ich eine Tar-Datei mit einem ausführbaren configure
versenden muss Skript.)
der Hauptgrund ist tar
nimmt ein einzelnes Dateinamen-Argument an. Wenn Sie tar *.tgz
anrufen bash erweitert den *
zu allen Dateinamen mit tgz-Formant und es wird zu tar file1 file2 file3
was von tar
nicht akzeptiert wird . Also entweder Sie verwenden eine for-Schleife wie for i in *.tgz; do tar -zxvf $i ;done
oder verwenden Sie einen anderen Befehl, der tar
ausführt als Nebeneffekt, wie in Kommentaren gezeigt, ist ls
oder find . -maxdepth 1 -name \*tgz -exec tar -zxvf {} \;
(ls
Ausgabe ist immer riskant)
Beim Schreiben
tar -xzf *.gz
Ihre Shell erweitert es zu der Zeichenfolge:
tar -xzf 1.gz 2.gz 3.gz
(vorausgesetzt, 1.gz, 2.gz und 3.gz befinden sich in Ihrem aktuellen Verzeichnis).
tar
denkt, dass Sie 2.gz
extrahieren möchten und 3.gz
ab 1.gz
; es kann diese Dateien in den Archiven nicht finden und das verursacht die Fehlermeldung.
Sie müssen Schleife for
verwenden des Befehls xargs
um Ihre Dateien zu extrahieren.
ls *.gz |xargs -n1 tar -xzf
Das bedeutet:Lass mich tar -xzf
laufen für alle gz
-Datei im aktuellen Verzeichnis.