GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Shell-Fehler „tar:nicht im Archiv gefunden“ bei Verwendung eines regulären Ausdrucks

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.


Linux
  1. [Behoben] Fehler:Snap „Paket“ nicht gefunden

  2. Array in Bash nicht gefunden

  3. SCHWERWIEGEND:Fehler „Modul nicht gefunden“ bei Verwendung von modprobe

  4. Modul nicht gefunden, wenn ich eine Modprobe mache

  5. sshpass:Fehler „Befehl nicht gefunden“.

Fehlerbehebung „Bash:Command Not Found“-Fehler in Linux

If…else…if-Anweisung (Fehler „Befehl nicht gefunden“)?

Tar-Fehler:Unerwartetes EOF im Archiv

tar:Fehler ist nicht behebbar:wird jetzt beendet

libevent nicht gefunden Fehler in tmux

Übereinstimmung gefunden oder nicht mit awk anzeigen