ทำไม `tar -xvfz` ถึงล้มเหลว แต่` tar-xvfz` ทำงาน


41

tar -xvfz foo.tar.gz ส่งคืนข้อผิดพลาด tar: z: Cannot open: No such file or directory

สิ่งนี้สามารถเข้าใจได้อย่างสมบูรณ์ - fสวิตช์คาดหวังว่าจะมีชื่อไฟล์และจำเป็นต้องมีการใช้งานครั้งสุดท้าย

อย่างไรก็ตามการละเว้นการใช้เครื่องหมายขีดกลางtar xvfz foot.tar.gzและยกเลิกการบีบอัดและยกเลิกการตรวจสอบไฟล์

ฉันได้ทำการทดสอบกับ OS X 10.8 และ Ubuntu 12.04 แล้ว

ความคิดใด ๆ

[แก้ไขเพื่อเพิ่ม]

tar -zxvf foo.tar.gzฉันมักจะใช้ อย่างไรก็ตามคำถามนี้เกิดขึ้นเพราะxkcd นี้และความประหลาดใจของฉันเมื่อมีคนยืนยันว่าtar xvfzจะทำงาน

ป้อนคำอธิบายรูปภาพที่นี่


12
ขอโทษด้วย: xkcd.com/1168
MichaelHouse

คำตอบ:


61

tar มีไวยากรณ์ 3 ประเภท (ตามนี้ ):

  • ตัวเลือกยาว (- ไฟล์)
  • ตัวเลือกสั้น ๆ (-f)
  • ตัวเลือกเก่า (f)

สำหรับไวยากรณ์ตัวเลือกเก่าตัวอักษรทั้งหมดจะต้องเป็นไปตาม "tar" และต้องอยู่ในกลุ่มเดียวโดยไม่มีช่องว่าง คำสั่งของตัวอักษรไม่สำคัญจริงๆตราบใดที่การขัดแย้งกับตัวอักษรเหล่านั้นเป็นไปตามลำดับเดียวกันหลังจากกลุ่มตัวเลือก

วิธีการเขียนตัวเลือก tar แบบเก่าสามารถสร้างความประหลาดใจให้กับผู้ใช้ ตัวอย่างเช่นสองคำสั่ง:

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

ค่อนข้างแตกต่างกัน ตัวอย่างแรกใช้ 'archive.tar.gz' เป็นค่าสำหรับตัวเลือก 'f' และรู้จักตัวเลือก 'z' อย่างไรก็ตามตัวอย่างที่สองใช้ 'z' เป็นค่าสำหรับตัวเลือก 'f' - อาจไม่ใช่สิ่งที่ตั้งใจ

ตัวเลือกเก่าจะถูกเก็บไว้เพื่อให้เข้ากันได้กับ tar รุ่นเก่า

คำสั่งด้วย '-' เทียบเท่า

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

นั่นคือเหตุผลที่ตัวอย่างของคุณทำงานโดยไม่มี "-" และไม่ใช่กับ "-"


3
wtf unix
BlueRaja
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.