Trong x
chế độ, tất cả các phiên bản tuân thủ POSIX tar
yêu cầu-f
đọc lưu trữ đầu vào từ một nơi khác ngoài mặc định. Để đọc từ stdin
, POSIX cũng yêu cầu bạn cung cấp -
làm tên tệp:
$ tar -xf - < file.tar
Cả GNU tar
và bsdtar
hiểu cú pháp đó.
GNU tar
khác với POSIX ở chỗ nó sẽ chấp nhận một tar
kho lưu trữ stdin
mà không có -f -
đối số rõ ràng . Trên thực tế, POSIX nói rằng không có -f -
, nó hoàn toàn không nên sử dụng stdin
. Rõ ràng từ câu hỏi của bạn rằng bạn đang lấy ví dụ dòng lệnh của mình từ tar
người dùng GNU .
bsdtar
theo POSIX trong yêu cầu -f -
nếu bạn muốn nó đọc từ stdin
chứ không phải là một tệp.
Điều đó đưa chúng ta đến câu hỏi thực tế của bạn: khi không được đưa ra -f -
, tại sao lại bsdtar
chọn đọc từ đó /dev/st0
? Đó là mặc định tôi đã đề cập ở trên. POSIX chỉ nói mặc định này là "phụ thuộc vào hệ thống;" bsdtar
chọn sử dụng tên của nút dev của ổ băng đầu tiên , điều này xảy ra trên Linux. 1/dev/st0
Bạn cần nói điều này thay vào đó:
$ bsdtar -xf - < archive.tar.gz
Hoặc, bỏ qua chuyển hướng hoàn toàn:
$ bsdtar -xf archive.tar.gz
Tôi đã xóa -z
vì cả hai bsdtar
và GNU tar
sẽ tự động phát hiện gzip
nén trong x
chế độ. (Các phiên bản cũ của GNU tar
đã yêu cầu cờ loại nén, nhưng tự động dò tìm đã được thêm vào trong phiên bản 1.15 , được phát hành năm 2004.)
Tôi cũng đã loại bỏ -C .
bit vì nó chỉ bảo bsdtar
thay đổi thư mục hiện tại trước khi giải nén tệp lưu trữ. Đó là một không-op .
- Tại sao mặc định cho ổ đĩa băng đầu tiên? Bởi vì
tar
là ARchiver Băng . tar
xuất phát từ thời điểm mà hầu hết mọi hộp Unix thực tế đều có ổ băng từ.
tar --version
trên OS X mang lại cho tôibsdtar 2.8.3 - libarchive 2.8.3
.