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

anu
sumber
12
Maaf: xkcd.com/1168
MichaelHouse

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 "-"

GeekRide
sumber
3
wtf unix
BlueRaja