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?

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.


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


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/

-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         

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.