Mengapa `tar -xvfz` gagal, tetapi` tar xvfz` bekerja?


41

tar -xvfz foo.tar.gz mengembalikan kesalahan tar: z: Cannot open: No such file or directory

Ini benar-benar dapat dimengerti - fswitch mengharapkan nama file, dan karena itu perlu yang terakhir.

Namun, menghilangkan tanda hubung tar xvfz foot.tar.gzberfungsi dan tidak mengompresi dan menghapus file.

Saya sudah menguji ini pada OS X 10.8 dan Ubuntu 12.04.

Ada ide mengapa?

[diedit untuk menambahkan]

Saya selalu menggunakan tar -zxvf foo.tar.gz. Namun, pertanyaan ini muncul karena xkcd ini , dan keterkejutan saya ketika seseorang bersikeras itu tar xvfzakan berhasil.

masukkan deskripsi gambar di sini


Jawaban:


61

tar memiliki 3 jenis sintaks (menurut ini ):

  • opsi panjang (--file)
  • opsi pendek (-f)
  • opsi lama (f)

Untuk sintaksis opsi lama, semua huruf harus mengikuti "tar" dan semua harus jatuh ke dalam satu rumpun tanpa spasi. Urutan surat-surat itu tidak terlalu penting, asalkan argumen untuk surat-surat itu mengikuti urutan yang sama setelah rumpun opsi.

Cara penulisan opsi tar yang lama ini dapat mengejutkan pengguna yang berpengalaman sekalipun. Sebagai contoh, dua perintah:

 # tar cfz archive.tar.gz file
 # tar -cfz archive.tar.gz file

sangat berbeda. Contoh pertama menggunakan 'archive.tar.gz' sebagai nilai untuk opsi 'f' dan mengenali opsi 'z'. Contoh kedua, bagaimanapun, menggunakan 'z' sebagai nilai untuk opsi 'f' - mungkin bukan yang dimaksudkan.

Opsi lama disimpan untuk kompatibilitas dengan tar versi lama.

Perintah dengan '-' sama dengan

tar -czf archive.tar.gz file
tar -cf archive.tar.gz -z file
tar cf archive.tar.gz -z file

Itulah alasan contoh Anda bekerja tanpa tanda "-" dan bukan dengan "-"


3
wtf unix
BlueRaja
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.