tar cvf atau tar -cvf?

24

Saya telah belajar menggunakan tar tanpa '-' untuk opsi, seperti tar cvfz dir.tar.gz Directory/tapi saya baru saja menemukan tar -czvfsintaks yang sedikit berbeda (saya pikir 'f' harus menjadi pilihan terakhir dalam kasus ini).

Keduanya bekerja di linux dan Mac OS. Apakah ada sintaks yang disarankan, dengan ou tanpa '-' yang lebih portabel menurut rasa unix?

ascobol
sumber
Alasan mengapa -fharus menjadi opsi terakhir adalah karena dibutuhkan argumen dan argumen itu dapat diberikan menyentuh opsi. tar -cvfz dir.tar.gz Directoryberarti membuat arsip bernama zyang berisi file dir.tar.gzdan Directory.
JoL

Jawaban:

27

taradalah salah satu perintah kuno dari hari-hari ketika sintaksis opsi tidak distandarisasi. Karena semua doa yang berguna tarmengharuskan Anda menentukan operasi sebelum memberikan nama file apa pun, sebagian besar tarimplementasi menafsirkan argumen pertama mereka sebagai opsi meskipun itu tidak dimulai dengan a -. Sebagian besar implementasi saat ini menerima -; satu-satunya pengecualian yang saya ketahui adalah Minix .

Versi POSIX dan Single Unix yang lebih lama menyertakan tarperintah tanpa -sebelum specifier operasi. Single Unix v2 memiliki kedua pengarsip tradisional cpiodan tar, tetapi sangat sedikit bendera dapat distandarisasi karena implementasi yang ada terlalu berbeda, sehingga standar memperkenalkan perintah baru pax,, yang merupakan satu-satunya pengarsip standar sejak Single Unix v3 . Jika Anda ingin kepatuhan standar, gunakan pax, tetapi berhati-hatilah karena banyak distribusi Linux tidak memasukkannya dalam instalasi basis mereka, dan tidak ada paxdalam Minix . Jika Anda ingin mudah dibawa dalam praktik, gunakan tar cf filename.tar.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
1
Juga perhatikan bahwa jika distro Linux berisi pax, biasanya hadir dengan implementasi pax yang paling dikenal (GNU pax) yang harus dihindari karena banyak bug.
schily
Juga, psperintah memiliki perilaku yang sama, Anda dapat menghilangkan opsi -untuk.
perror
1
@peror Itu salah. Banyak versi psjangan biarkan Anda menghilangkan -. Versi Linux memiliki opsi dengan dan tanpa -, tetapi sebagian besar memiliki arti yang berbeda (BSD vs System V kompatibilitas).
Gilles 'SO- stop being evil'
1
Memang benar bahwa, sebagian besar waktu, saya hanya menggunakan ps aux... Jadi, saya mungkin (sebagian) salah. Maaf.
perror
13

Saya mungkin dinosaurus, tetapi saya pikir bahwa terbiasa menggunakan "cvf" dan bukannya "-cvf" mungkin lebih portabel. Saya membayangkan sebagian besar distro Linux menggunakan tar GNU, dan saya kira * BSD juga melakukannya, tetapi Anda akan menemukan Unix berpemilik yang masih menggunakan tar SysV lama, yang dulu mengharuskan Anda untuk tidak menggunakan tanda '-' pada opsi .

Saya tidak menggunakan "-cvf" (atau "-xf" atau apa pun) dan saya tidak memiliki masalah bahkan dengan pendarahan Arch linux.

Dan sebagai catatan tambahan, saya pikir Anda dapat menggunakan opsi perintah "jar" standar Sun dengan atau tanpa tanda '-' juga.

Bruce Ediger
sumber
Saya setuju dengan jawaban Anda, bahkan jika halaman info tar (yang sangat jelas tentang tiga gaya menentukan opsi) mengatakan bahwa opsi lama disimpan hanya untuk kompatibilitas dan ada banyak opsi yang TIDAK memiliki korespondensi lama.
David Costa
1
Anda salah: tar pada AT&T UNIX ditulis untuk tidak memiliki - tetapi menerima - dan melewatkannya. Satu-satunya cara portabel untuk memanggil tar adalah dengan menyebutnya tanpa - dan jika Anda pernah menemukan implementasi "tar" yang tidak menerima hal-hal tanpa -, ini bukan tar.
schily
3

Ada beberapa program di UNIX yang tidak mengikuti standar opsi saat ini.

Salah satunya adalah dd, tetapi dd berasal dari program mainframe IBM DDR(Disk Dump and Restore).

Yang satu ardan yang lainnya tar. Dari informasi saya, tar ingin mirip dengan ar.

Semua implementasi tar bekerja tanpa - dan tidak ada implementasi yang berguna membutuhkan -. Jadi, jika Anda ingin menulis skrip portabel, periksa standar SUSv2 dan hanya gunakan baris perintah yang kompatibel dengan SUSv2.

schily
sumber