Tại sao `tar -xvfz` không thành công, nhưng` tar xvfz` hoạt động?


41

tar -xvfz foo.tar.gz trả về một lỗi tar: z: Cannot open: No such file or directory

Điều này là hoàn toàn dễ hiểu - công ftắc mong đợi một tên tệp, và do đó cần phải là cuối cùng.

Tuy nhiên, bỏ qua dấu gạch nối tar xvfz foot.tar.gzhoạt động và giải nén và giải nén tệp.

Tôi đã thử nghiệm điều này trên OS X 10.8 và Ubuntu 12.04.

Bất cứ ý tưởng tại sao?

[chỉnh sửa để thêm]

Tôi luôn luôn sử dụng tar -zxvf foo.tar.gz. Tuy nhiên, câu hỏi này đã được đặt ra vì xkcd này , và tôi ngạc nhiên khi ai đó khăng khăng rằng nó tar xvfzsẽ hoạt động.

nhập mô tả hình ảnh ở đây


12

Câu trả lời:


61

tar có 3 loại cú pháp (theo điều này ):

  • tùy chọn dài (--file)
  • tùy chọn ngắn (-f)
  • tùy chọn cũ (f)

Đối với cú pháp tùy chọn cũ, tất cả các chữ cái phải tuân theo "tar" và tất cả phải rơi vào một cụm không có khoảng trắng. Thứ tự của các chữ cái không thực sự quan trọng, miễn là các đối số cho các chữ cái đó theo cùng một thứ tự sau cụm tùy chọn.

Cách viết tùy chọn tar cũ này có thể gây ngạc nhiên ngay cả người dùng có kinh nghiệm. Ví dụ: hai lệnh:

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

khá khác nhau Ví dụ đầu tiên sử dụng 'archive.tar.gz' làm giá trị cho tùy chọn 'f' và nhận ra tùy chọn 'z'. Tuy nhiên, ví dụ thứ hai sử dụng 'z' làm giá trị cho tùy chọn 'f' - có thể không phải là mục đích.

Các tùy chọn cũ được giữ để tương thích với các phiên bản cũ của tar.

Lệnh có dấu '-' tương đương với

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

Đó là lý do mà ví dụ của bạn hoạt động mà không có "-" và không có "-"


3
wtf unix
BlueRaja 2/213
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.