tar keluar pada “Cannot stat: No this file of directory”, mengapa?

50

Saya mencoba membuat file tar.gz menggunakan perintah berikut:

sudo tar -vcfz dvr_rdk_v1.tar.gz dvr_rdk/

Itu kemudian mulai membuat file (banyak file di folder), tetapi kemudian saya mendapatkan kesalahan berikut:

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

Saya tidak melihat deskripsi kesalahan ini, apa artinya?

tebusan
sumber

Jawaban:

61

Hapus -dari vcfzopsi. tartidak perlu tanda hubung untuk opsi.

Dengan tanda hubung, argumen untuk -fopsi adalah z. Jadi perintah ini berlaku mencoba mengarsipkan dvr_rdk_v1.tar.gzdan dvr_rdkmenjadi arsip yang disebut z. Tanpa tanda hubung, semantik dari opsi berubah, sehingga argumen berikutnya pada baris perintah, yaitu nama file arsip Anda, menjadi argumen untuk fbendera.

Periksa juga izin menulis Anda ke direktori tempat Anda menjalankan perintah.

Velnix
sumber
6
Itu tidak perlu tanda hubung, tetapi mereka seharusnya tidak menjadi masalah, mereka hanya opsional
Michael Mrozek
18
@MichaelMrozek Sebenarnya, menghapus -memang membuat perbedaan, karena tar GNU unik. Argumen opsi tidak dapat digabungkan dalam argumen pertama ketika argumen tidak dimulai dengan a -, jadi argumen to fadalah argumen selanjutnya tar, dan begitu tar vcfz dvr_rdk_v1.tar.gzjuga dengan tar -v -c -f dvr_rdk_v1.tar.gz -z.
Gilles 'SANGAT berhenti menjadi jahat'
1
Saya juga menyadari jika saya menghapus zatau jkompresi arsip berhasil bahkan dengan -terlibat. Ketika saya menambahkan tanda hubung termasuk itu memperlakukan karakter terakhir dalam opsi sebagai "file". Jadi sebagai hasilnya saya mendapatkan jatau zsebagai file yang diarsipkan jika saya menggunakan opsi ini -cvfzatau -cvfj.
JohnnyQ
9
Rangkuman: jika 'f' muncul sebagai opsi di mana saja selain dari opsi terakhir, maka perintah tidak akan melakukan apa yang dimaksudkan. Saya tidak melihat bagaimana Gnu tidak bisa menambahkan peringatan ketika mereka mendeteksi masalah serius dan mudah dideteksi. Saya hanya menghabiskan 40 menit mencoba men-debug keanehan ini. Yang ini pasti menghabiskan ratusan ribu jam kerja untuk produktivitas.
smci
58

The -fpilihan harus langsung mendahului nama file. Jadi, gunakan tar -vczf filename.tar.gzsaja-vcfz

twan163
sumber
Ah ini menjelaskan mengapa perintah yang saya gunakan mencoba untuk membuat file arsip terkompresi yang disebut jatau zdengan perintah ini -cvfjdan -cvfzmasing - masing.
JohnnyQ
17

The perintah tar historis telah menjadi salah satu dari beberapa perintah yang tidak mengikuti Unix pedoman utilitas sintaks .

Halaman standar untuk tar mengatakan:

f
Gunakan operan file pertama (atau yang kedua, jika b sudah ditentukan) sebagai nama arsip alih-alih standar yang tergantung pada sistem

Sedangkan pedoman sintaks meliputi ini:

Pedoman 5:
Satu atau lebih opsi tanpa argumen opsi, diikuti paling banyak satu opsi yang menggunakan argumen opsi, harus diterima ketika dikelompokkan di belakang satu pembatas '-'.

Jadi, sementara perintah yang Anda ketikkan,, tar -vcfz dvr_rdk_v1.tar.gz dvr_rdk/akan baik-baik saja pada versi tar yang lebih lama, versi tar tertentu yang ditulis untuk mengikuti pedoman sintaks utilitas akan menguraikan ini artinya "gunakan zsebagai argumen file -f". Jadi, Anda harus menggunakan yang berikut ini untuk menjadi portabel:

tar -cvzf dvr_rdk_v1.tar.gz dvr_rdk/
Tandai Plotnick
sumber
-1

Untuk membuat arsip

$ tar -cvf music.tar Music/

Ini menunjukkan daftar file & folder

$ tar -tvf music.tar         

Dan untuk mengekstrak lagi

$ tar -xvf music.tar         
dhamu
sumber
Ini tidak benar-benar menjelaskan kesalahannya, bukan? Ini hanya menjelaskan penggunaan tar.
Bernhard
1
@ Bernhard Yah, kesalahannya adalah bahwa dia menggunakan tarsalah, meskipun itu bagus untuk setidaknya menyebutkan apa perbedaan utama (pindah -fke akhir)
Michael Mrozek
2
@MichaelMrozek Yah, dia lebih suka tidak zmemasukkan dari fpada akhirnya, maka komentar saya.
Bernhard
Perintah ini berfungsi untuk ubuntu, Ini akan berhasil
dhamu
BAIK! maaf, saya tidak mendengarkan pertanyaan Anda, tetapi perintah ini berfungsi untuk ubuntu.
Dhamu