tar beendet sich bei "Kann nicht angeben: Keine solche Datei des Verzeichnisses", warum?

50

Ich versuche, eine tar.gz-Datei mit dem folgenden Befehl zu erstellen:

sudo tar -vcfz dvr_rdk_v1.tar.gz dvr_rdk/

Es werden dann Dateien erstellt (viele Dateien im Ordner), aber dann wird die folgende Fehlermeldung angezeigt:

tar: dvr_rdk_v1.tar.gz: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

Ich sehe keine Beschreibung dieses Fehlers. Was bedeutet das?

ransh
quelle

Antworten:

61

-Aus vcfzOptionen entfernen . tarbenötigt keinen Bindestrich für Optionen.

Mit einem Bindestrich -flautet das Argument für die Option z. Der Befehl versucht also tatsächlich zu archivieren dvr_rdk_v1.tar.gzund dvr_rdkin ein Archiv mit dem Namen z. Ohne den Bindestrich ändert sich die Semantik der Optionen, sodass das nächste Argument in der Befehlszeile, dh der Dateiname Ihres Archivs, zum Argument für das fFlag wird.

Überprüfen Sie auch Ihre Schreibberechtigung für das Verzeichnis, von dem aus Sie den Befehl ausführen.

Velnix
quelle
6
Dabei spielt es keine brauchen Bindestriche, aber sie sollten kein Problem sein, sind sie nur optional
Michael Mrozek
18
@MichaelMrozek Tatsächlich macht das Entfernen des -einen Unterschied, da GNU-Teer etwas eigenartig ist. Optionsargumente können nicht im ersten Argument gebündelt werden, wenn es nicht mit a beginnt. -Daher fist das Argument an das nächste Argument an tarund tar vcfz dvr_rdk_v1.tar.gzentspricht somit tar -v -c -f dvr_rdk_v1.tar.gz -z.
Gilles 'SO- hör auf böse zu sein'
1
Mir ist auch aufgefallen, ob ich die Komprimierung entferne zoder jdas Archiv auch mit Erfolg -beteiligt ist. Wenn ich den Bindestrich hinzufüge, wird das letzte Zeichen in der Option als "Datei" behandelt. Als Ergebnis erhalte ich joder zals archivierte Datei, wenn ich diese Option -cvfzoder verwende -cvfj.
JohnnyQ
9
Zusammenfassung: Wenn 'f' als Option an einer anderen Stelle als der letzten Option vorkommt, wird der Befehl nicht das tun, was beabsichtigt war. Ich verstehe nicht, wie Gnu eine Warnung hinzufügen konnte, wenn sie ein so ernstes und leicht erkennbares Problem entdeckten. Ich habe gerade 40 Minuten damit verbracht, diese Verrücktheit zu debuggen. Dieser muss Hunderttausende von Arbeitsstunden an Produktivität verschwendet haben.
smci
57

Die -fOption sollte direkt vor dem Dateinamen stehen. Verwenden Sie also tar -vczf filename.tar.gzanstelle von-vcfz

twan163
quelle
Ah dies erklärt , warum der Befehl , den ich versucht bin mit einer komprimierten Archivdatei erstellen aufgerufen joder zmit diesen Befehlen -cvfjund -cvfzjeweils.
JohnnyQ
17

Der Befehl tar war in der Vergangenheit einer der wenigen Befehle, die nicht den Syntaxrichtlinien des Unix- Dienstprogramms entsprachen .

Die Standardseite für Teer sagt:

f
Verwenden Sie anstelle der systemabhängigen Standardeinstellung den ersten Dateioperanden (oder den zweiten, falls b bereits angegeben wurde) als Namen des Archivs

Während die Syntaxrichtlinien dies beinhalten:

Leitlinie 5:
Eine oder mehrere Optionen ohne Optionsargumente, gefolgt von höchstens einer Option, die ein Optionsargument akzeptiert, sollten akzeptiert werden, wenn sie hinter einem - -Trennzeichen gruppiert sind.

Während der von Ihnen eingegebene Befehl tar -vcfz dvr_rdk_v1.tar.gz dvr_rdk/für ältere Versionen von tar in Ordnung ist, wird er von bestimmten Versionen von tar, die so geschrieben wurden, dass sie den Richtlinien für die Dienstprogrammsyntax genau entsprechen, zals "Verwendung als Dateiargument für" analysiert -f. Sie sollten also Folgendes verwenden, um portabel zu sein:

tar -cvzf dvr_rdk_v1.tar.gz dvr_rdk/
Mark Plotnick
quelle
-1

So erstellen Sie das Archiv

$ tar -cvf music.tar Music/

Dies zeigt die Liste der Dateien und Ordner

$ tar -tvf music.tar         

Und wieder zu extrahieren

$ tar -xvf music.tar         
Dhamu
quelle
Das erklärt seinen Fehler nicht wirklich, oder? Dies erklärt nur die Verwendung von tar.
Bernhard
1
@Bernhard Nun, sein Fehler war, dass er tarfalsch verwendet hat, obwohl es nett ist, zumindest zu erwähnen, was der Hauptunterschied ist ( -fbis zum Ende)
Michael Mrozek
2
@MichaelMrozek Naja, er hat das lieber ausgelassen zals fam Ende zu setzen, daher mein Kommentar.
Bernhard
Dieser Befehl für Ubuntu arbeiten, wird es Erfolg
Dhamu
OKAY! sorry, ich höre dir nicht zu frage, aber der befehl funktioniert für ubuntu.
Dhamu