tar thoát trên không thể thống kê stat: Không có tập tin thư mục nào như vậy, tại sao?


50

Tôi đang cố gắng tạo tệp tar.gz bằng lệnh sau:

sudo tar -vcfz dvr_rdk_v1.tar.gz dvr_rdk/

Sau đó nó bắt đầu tạo tệp (nhiều tệp trong thư mục), nhưng sau đó tôi gặp lỗi sau:

tar: dvr_rdk_v1.tar.gz: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

Tôi không thấy bất kỳ mô tả về lỗi này, nó có nghĩa là gì?

Câu trả lời:


61

Xóa -khỏi vcfzcác tùy chọn. tarkhông cần gạch nối cho các tùy chọn.

Với một dấu gạch nối, đối số cho -ftùy chọn là z. Vì vậy, lệnh có hiệu lực cố gắng lưu trữ dvr_rdk_v1.tar.gzdvr_rdkvào một kho lưu trữ được gọi là z. Không có dấu gạch nối, ngữ nghĩa của các tùy chọn thay đổi, để đối số tiếp theo trên dòng lệnh, tức là tên tệp lưu trữ của bạn, trở thành đối số cho fcờ.

Đồng thời kiểm tra quyền ghi của bạn vào thư mục mà bạn đang thực hiện lệnh.


6
Nó không cần dấu gạch ngang, nhưng chúng không phải là vấn đề, chúng chỉ là tùy chọn
Michael Mrozek

18
@MichaelMrozek Trên thực tế, việc loại bỏ -không tạo ra sự khác biệt, bởi vì GNU tar là kỳ quặc. Các đối số tùy chọn không thể được gói trong đối số đầu tiên khi nó không bắt đầu bằng a -, vì vậy đối số flà đối số tiếp theo tarvà do đó tar vcfz dvr_rdk_v1.tar.gztương đương với tar -v -c -f dvr_rdk_v1.tar.gz -z.
Gilles 'SO- ngừng trở nên xấu xa'

1
Tôi cũng nhận ra nếu tôi loại bỏ zhoặc jnén lưu trữ thành công ngay cả khi có -liên quan. Khi tôi thêm dấu gạch nối được bao gồm, nó xử lý ký tự cuối cùng trong tùy chọn dưới dạng "tệp". Vì vậy, kết quả là tôi nhận được jhoặc zdưới dạng tệp lưu trữ nếu tôi sử dụng tùy chọn này -cvfzhoặc -cvfj.
JohnnyQ

9
Tóm tắt: nếu 'f' xảy ra dưới dạng tùy chọn ở bất kỳ nơi nào khác ngoài tùy chọn cuối cùng, thì lệnh sẽ không thực hiện những gì đã được dự định. Tôi không thấy Gnu không thể thêm cảnh báo khi họ phát hiện vấn đề nghiêm trọng và dễ phát hiện như vậy. Tôi chỉ mất 40 phút để gỡ lỗi cho sự kỳ lạ này. Điều này hẳn đã lãng phí hàng trăm ngàn giờ năng suất.
smci

57

Các -ftùy chọn nên trực tiếp đặt trước tên tập tin. Vì vậy, sử dụng tar -vczf filename.tar.gzthay vì-vcfz


Ah điều này giải thích tại sao lệnh tôi đang sử dụng cố gắng tạo một tệp lưu trữ nén được gọi jhoặc zvới các lệnh này -cvfj-cvfztương ứng.
JohnnyQ

17

Lệnh tar trong lịch sử là một trong số ít các lệnh không tuân theo các nguyên tắc cú pháp tiện ích Unix .

Trang tiêu chuẩn cho tar nói:

f
Sử dụng toán hạng tệp đầu tiên (hoặc thứ hai, nếu b đã được chỉ định) làm tên của kho lưu trữ thay vì mặc định phụ thuộc hệ thống

Trong khi các hướng dẫn cú pháp bao gồm:

Hướng dẫn 5:
Một hoặc nhiều tùy chọn không có đối số tùy chọn, theo sau là nhiều nhất một tùy chọn có đối số tùy chọn, nên được chấp nhận khi được nhóm phía sau một dấu phân cách '-'.

Vì vậy, trong khi lệnh bạn đã nhập, tar -vcfz dvr_rdk_v1.tar.gz dvr_rdk/sẽ ổn đối với các phiên bản cũ hơn của tar, một số phiên bản tar nhất định được viết để tuân thủ nghiêm ngặt các nguyên tắc cú pháp tiện ích sẽ phân tích điều này có nghĩa là "sử dụng zlàm đối số tệp cho -f". Vì vậy, bạn nên sử dụng sau đây để được xách tay:

tar -cvzf dvr_rdk_v1.tar.gz dvr_rdk/

-1

Để tạo kho lưu trữ

$ tar -cvf music.tar Music/

Điều này cho thấy danh sách các tập tin và thư mục

$ tar -tvf music.tar         

Và để giải nén lại

$ tar -xvf music.tar         

Điều này không thực sự giải thích lỗi của mình, phải không? Đây chỉ là giải thích việc sử dụng tar.
Bernhard

1
@Bernhard Chà, lỗi của anh ấy là anh ấy đã sử dụng tarsai, mặc dù ít nhất cũng tốt để đề cập đến sự khác biệt chính là gì (chuyển -fđến cuối)
Michael Mrozek

2
@MichaelMrozek Chà, anh thà bỏ đi còn zhơn fcuối cùng, vì thế tôi nhận xét.
Bernhard

Lệnh này hoạt động cho Ubuntu, Nó sẽ thành công
dhamu

ĐỒNG Ý! xin lỗi, tôi không nghe bạn hỏi, nhưng lệnh làm việc cho ubfox.
dhamu
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.