tar kończy działanie na „Cannot stat: Nie ma takiego pliku katalogu”, dlaczego?

50

Próbuję utworzyć plik tar.gz za pomocą następującego polecenia:

sudo tar -vcfz dvr_rdk_v1.tar.gz dvr_rdk/

Następnie zaczyna tworzyć pliki (wiele plików w folderze), ale pojawia się następujący błąd:

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

Nie widzę żadnego opisu tego błędu, co to znaczy?

okup
źródło

Odpowiedzi:

61

Usuń -z vcfzopcji. tarnie potrzebuje łącznika dla opcji.

W przypadku łącznika argumentem tej -fopcji jest z. Tak więc polecenie faktycznie próbuje zarchiwizować dvr_rdk_v1.tar.gzi dvr_rdkdo archiwum o nazwie z. Bez łącznika semantyka opcji zmienia się, tak że następny argument w wierszu poleceń, tj. Nazwa pliku archiwum, staje się argumentem fflagi.

Sprawdź także swoje uprawnienia do zapisu w katalogu, z którego wykonujesz polecenie.

Velnix
źródło
6
Nie potrzebuje łączników, ale nie powinny stanowić problemu, są po prostu opcjonalne
Michał Mrożek
18
@MichaelMrozek Właściwie usunięcie tego -robi różnicę, ponieważ GNU tar jest dziwaczny. Argumentów opcji nie można zawrzeć w pierwszym argumencie, gdy nie zaczyna się od a -, więc argument do fjest kolejnym argumentem tar, a więc tar vcfz dvr_rdk_v1.tar.gzjest równoważny z tar -v -c -f dvr_rdk_v1.tar.gz -z.
Gilles 'SO - przestań być zły'
1
Uświadomiłem sobie również, że jeśli usunę kompresję zlub jarchiwum, to uda się nawet przy -zaangażowanym zaangażowaniu. Po dodaniu łącznika jest uwzględniany, traktuje ostatni znak w opcji jako „plik”. W rezultacie otrzymuję jlub zjako zarchiwizowany plik, jeśli użyję tej opcji -cvfzlub -cvfj.
JohnnyQ
9
Podsumowanie: jeśli „f” występuje jako opcja w dowolnym miejscu innym niż ostatnia opcja, polecenie nie wykona tego, co było zamierzone. Nie rozumiem, w jaki sposób Gnu nie mógł dodać ostrzeżenia, gdy wykryje tak poważny i łatwo wykrywalny problem. Właśnie spędziłem 40 minut próbując debugować tę dziwność. Ten musiał stracić setki tysięcy roboczogodzin wydajności.
smci
57

-fOpcja powinna bezpośrednio poprzedzać nazwę pliku. Więc użyj tar -vczf filename.tar.gzzamiast-vcfz

twan163
źródło
Ach, to wyjaśnia, dlaczego polecenie, którego używam, próbuje utworzyć skompresowany plik archiwum o nazwie jlub za zpomocą tych poleceń -cvfji -cvfzodpowiednio.
JohnnyQ
17

Polecenie tar historycznie było jednym z niewielu poleceń, które nie są zgodne ze wskazówkami dotyczącymi składni narzędzi uniksowych .

Strona standardów dla tar mówi:

f
Użyj pierwszego operandu pliku (lub drugiego, jeśli już określono b) jako nazwy archiwum zamiast domyślnego systemu zależnego

Chociaż wytyczne dotyczące składni obejmują:

Wytyczna 5:
Jedna lub więcej opcji bez argumentów opcji, a następnie co najwyżej jedna opcja, która przyjmuje argument-opcji, powinny zostać zaakceptowane, gdy zostaną zgrupowane za jednym ogranicznikiem „-”.

Tak więc, podczas gdy wpisane przez ciebie polecenie tar -vcfz dvr_rdk_v1.tar.gz dvr_rdk/będzie dobrze na starszych wersjach tar, niektóre wersje tar, które są napisane w celu ścisłego przestrzegania wytycznych składni narzędzia, przeanalizują to, co znaczy „użyj zjako argumentu pliku do -f”. Aby więc być przenośnym, powinieneś użyć następujących elementów:

tar -cvzf dvr_rdk_v1.tar.gz dvr_rdk/
Mark Plotnick
źródło
-1

Aby utworzyć archiwum

$ tar -cvf music.tar Music/

Wyświetla listę plików i folderów

$ tar -tvf music.tar         

I ponownie wyodrębnić

$ tar -xvf music.tar         
dhamu
źródło
To tak naprawdę nie wyjaśnia jego błędu, prawda? To tylko wyjaśnia użycie tar.
Bernhard,
1
@Bernhard Cóż, jego błąd polegał na tym, że tarźle używał , chociaż miło jest przynajmniej wspomnieć o zasadniczej różnicy (przejście -fdo końca)
Michael Mrozek
2
@MichaelMrozek Cóż, raczej pominął zniż umieścił fna końcu, stąd mój komentarz.
Bernhard,
Ta komenda działa dla Ubuntu, zakończy się sukcesem
dhamu
DOBRZE! przepraszam, nie słucham twojego pytania, ale polecenie działające dla Ubuntu.
dhamu