Tôi sử dụng GNU tar. Nó có thể tự động phát hiện loại nén khi nén / giải nén tập tin. Nhưng tôi cần giải nén một kho lưu trữ từ stdin và loại nén không xác định. Tôi nhận thấy rằng tar có thể cho tôi gợi ý chính xác như:
tar: Archive is compressed. Use -z option
Nhưng tôi muốn tar sử dụng tùy chọn nén đó tự động mà không yêu cầu tôi nhập đối số đó. Làm thế nào tôi có thể làm điều đó? Tại sao tar không giải nén vì nó đã biết kiểu nén?
Cảm ơn bạn!
tar
không biết nó thuộc loại dữ liệu nào stdin
cho đến khi nó đọc nó, và sau đó là quá muộn để gọi chương trình giải nén. Nó hỗ trợ gzip, bzip2 và những thứ khác. Làm việc xung quanh vấn đề này không dễ dàng (nó sẽ phải đệm dữ liệu), vì vậy nó chỉ cho bạn thử lại.
fork()
/ đơn giản exec()
để dẫn dữ liệu thông qua một tiện ích giải nén. Tiện ích sẽ đọc từ stdin
đường ống và 4K đầu tiên sẽ bị thiếu. Không có cách nào để đưa dữ liệu trở lại vào đường ống sau khi đọc nó.
cat buffer - | gunzip
. (Ngoài ra, I / O không chặn có thể được sử dụng để tránh sự cần thiết của quy trình bổ sung.)