Trong xchế độ, tất cả các phiên bản tuân thủ POSIX taryê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 tarvà bsdtarhiểu cú pháp đó.
GNU tarkhác với POSIX ở chỗ nó sẽ chấp nhận một tarkho 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ừ tarngười dùng GNU .
bsdtartheo POSIX trong yêu cầu -f -nếu bạn muốn nó đọc từ stdinchứ 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 bsdtarchọ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;" bsdtarchọ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 -zvì cả hai bsdtarvà GNU tarsẽ tự động phát hiện gzipnén trong xchế độ. (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 bsdtarthay đổ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ì
tarlà ARchiver Băng . tarxuấ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 --versiontrên OS X mang lại cho tôibsdtar 2.8.3 - libarchive 2.8.3.