khai thác tar cũng tự động giải nén


7

Khi tôi chạy

tar -cvzf archive.tgz file1 file2 ; rm file1 file2

nó thường tạo ra một tarball nén, nhưng làm sao có thể

tar -xvf archive.tgz

trả lại cho tôi các tập tin không nén? Tôi đã luôn nghĩ rằng cờ -z sẽ được yêu cầu.


Rõ ràng, những người tạo ra UNIX cũng nghĩ rằng đó là cách tarhành xử: 9p.io/wiki/plan9/UNIX_to_Plan_9_command_translation/index.html
PSkocik

1
@PSkocik Chắc chắn, nó phá vỡ triết lý unix: Viết các chương trình làm một việc và làm tốt. Viết chương trình để làm việc cùng nhau.
jlliagre

@jlliagre Tôi không nghĩ vậy. Có thể suy ra rằng bạn cần gunzip khi tệp được nén, không có nghĩa là chương trình của bạn phải nguyên khối.
PSkocik

@PSkocik Bạn nói đúng. Ít nhất là các triển khai tar của GNU, Solaris và busybox đều sử dụng tiện ích gzip bên ngoài để không trùng lặp mã.
jlliagre

Câu trả lời:


17

Việc tartriển khai của bạn , có thể là GNUmột, đang phát hiện tệp được truyền dưới dạng tham số được nén.

Các tartriển khai được sử dụng nhiều nhất hiện nay GNU tarvà các triển khai busyboxđang tìm kiếm các byte đầu tiên của tệp, còn gọi là số ma thuật, để tìm hiểu xem nó có được nén hay không và sử dụng thuật toán nén.

Việc tartriển khai được tìm thấy trên các Unix thương mại dựa trên mã AT & T ban đầu không hỗ trợ -zcờ ở vị trí đầu tiên. Một ngoại lệ đáng chú ý là Solaris 11 tarnơi phần mở rộng này đã được thêm vào, bao gồm khả năng phát hiện định dạng tệp.


Tôi nghĩ rằng nó nhìn vào hậu tố. Nó cũng phải biết phương pháp nén nào đã được sử dụng để giải nén. Nó sẽ làm điều đó một cách chính xác nếu tập tin tar được hậu tố không chính xác?
Faheem Mitha

1
@FaheemMitha, không phải khoa học tên lửa, chỉ cần tìm tệp (1).
vonbrand

Trên thực tế, nhiều triển khai tar tự động phát hiện xem nội dung có được nén hay không. Một câu trả lời tốt sẽ chỉ ra điều này, và làm thế nào nó được thực hiện.
Thomas Dickey

@ThomasDickey đi cho nó.
Faheem Mitha

@ThomasDickey Tôi đã không viết triển khai tar khác mà không bao giờ thực hiện, chỉ là GNU tar là loại được sử dụng phổ biến nhất hiện nay, nó có khả năng là OP được sử dụng. Cũng lưu ý rằng tarlệnh ban đầu (AT & T) không hỗ trợ -zở vị trí đầu tiên.
jlliagre

1

Các -ztùy chọn không bắt buộc ở hai hiện thực nổi tiếng của tar: GNU tar và BSD tar (aka libarchive ). Phát hiện thuật toán nén cần thiết là chuyện nhỏ, được thực hiện bằng cách kiểm tra một vài byte đầu tiên của tệp đầu vào.

Việc bạn có đang sử dụng một hoặc một trong những triển khai đó hay không phần lớn phụ thuộc vào hệ điều hành bạn đang sử dụng: hệ thống dựa trên Linux hoặc hệ thống BSD (bao gồm cả OSX).

Tôi đã tóm tắt chi tiết về thời điểm các tính năng này được giới thiệu trên trang của tôi về tar so với tính di động .


0

Star giới thiệu phát hiện nén tự động và aprox giải nén tự động. 20 năm trước.

Ngày nay, một số triển khai tar khác, như gtar đã sao chép ý tưởng.

BTW: star hiểu các số ma thuật trong luồng nén để phát hiện phương pháp giải nén chính xác. Cũng lưu ý rằng gtar đã được báo cáo là không thành công khi lưu trữ nén được đọc từ stdinthay vào đó từ một tệp có tên.

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.