Tại sao không thể giải nén tập tin .zip? [đóng cửa]


28

Tôi đã thử phần lớn các định dạng (gzip, v.v.) để trích xuất một tệp zip tarvà khi tôi cảm thấy đủ thất vọng với Google về nó, tôi không tìm thấy cách nào để trích xuất một tệp zip tarvà chỉ đề xuất sử dụng ziphoặc unzip. Thực tế, hệ thống Linux của tôi thậm chí không có ziptiện ích, nhưng chỉ unzip(khiến tôi tự hỏi tại sao đây là tùy chọn được đề xuất chính). Tất nhiên là có unziphiệu quả, giải quyết vấn đề của tôi, nhưng tại sao không thể targiải nén tệp zip? Có lẽ tôi nên hỏi, sự khác biệt giữa zip và phương thức nén được hỗ trợ bởi tarcái gì?


1
Chỉ cần một lưu ý, bsdtarcó thể trích xuất .ziptài liệu lưu trữ: P
HalosGhost

12
Ý bạn là như trong "tại sao tôi không thể sử dụng dụng cụ mở hộp để cắt cà rốt?" Vấn đề là tar có định dạng tệp riêng của nó, và sau đó nén nó với bất kỳ phương thức nào bạn chọn. zip là một con thú hoàn toàn khác nhau. Đơn giản như thế. Đó là "cách unix", có một công cụ nhỏ làm tốt một công việc, thay vì có một con lợn nái mang trứng, mang trứng sẽ đáp ứng mọi nhu cầu của bạn.
tink

Tôi hơi chỉnh sửa câu hỏi của mình để làm cho câu hỏi này rõ ràng hơn, nhưng tôi nghĩ câu hỏi của tôi rõ ràng ngụ ý rằng tôi nghĩ zip là định dạng nén chứ không phải là công cụ thay thế cho nén tar +. Câu trả lời mà tôi đã chọn đã sửa chữa những gì tôi đang giả định và cho thấy rằng câu trả lời không dựa trên quan điểm.
Sao Diêm Vương

zipTheo mặc định, bạn không có vì giấy phép của nó không tương thích với GPL
venimus

Câu trả lời:


29

Triết lý UNIX là có các công cụ nhỏ. Một công cụ đang làm chính xác một điều, nhưng điều này đặc biệt tốt.

Công tarcụ này chỉ kết hợp một số tệp thành một tệp mà không nén.

Công gzipcụ này chỉ là nén một tập tin duy nhất.

Nếu bạn muốn có cả hai, bạn chỉ cần kết hợp cả hai công cụ dẫn đến một .tar.gztệp.


Công zipcụ này là một điều hoàn toàn khác. Nó lấy một loạt các tệp và kết hợp chúng thành một tệp nén duy nhất. Với các thuật toán hoàn toàn khác nhau.


Nếu bạn muốn một công cụ để cai trị tất cả sử dụng atool. Nó sẽ hỗ trợ một loạt các định dạng khác nhau chỉ bằng cách phát hiện định dạng và gọi đúng công cụ.


Cảm ơn bạn đã thực sự giải thích mục đích của cả hai thay vì chỉ giải thích những gì tar làm. Tôi sớm tìm ra câu trả lời sau khi xem một bài viết trên wikipedia liệt kê các định dạng cho "Lưu trữ", "Nén" và cả hai trong ba bảng khác nhau. Tôi hình dung tôi sẽ chờ câu trả lời giải thích rõ ràng điều này.
Sao Diêm Vương

Để có một chút cầu kỳ, gzipthuật toán nén là cùng một thuật toán được sử dụng bởi zip. Sự khác biệt là gzipcó nghĩa là nén bất kỳ luồng byte nào, bao gồm một .tartệp, trong khi zip, được lấy và lấy cảm hứng từ PKZIP, nén và lưu trữ theo một bước (và theo thứ tự đó).
Joe Sewell

9

Câu chuyện dài: công cụ tar GNU không chuyển qua zip / giải nén vì không ai quan tâm.

Truyện dài, kích thước gốc:

tarban đầu không có nghĩa là giải nén và nén các tệp, nhưng để lưu trữ một số tệp trong một tệp lớn. Vì mọi người không chỉ muốn lưu trữ tệp của họ mà còn nén chúng, vì vậy họ chỉ đưa tarđầu ra qua bất kỳ máy nén nào chấp nhận đầu vào luồng dữ liệu và thả kết quả vào một tệp. Lợi nhuận!

Bây giờ, để làm cho nhiệm vụ đó trở nên không đau đớn nhất có thể, tarđã quyết định chuyển nội bộ các tệp được tạo sang các công cụ nén, như gzip, lzma, v.v., được kích hoạt bằng các cờ đặc biệt cho mỗi định dạng khi chạy tar. Đó là lý do tại sao khi bạn cố trích xuất một tệp bị hỏng thông qua tarbạn sẽ thấy lỗi công cụ cơ bản, thay vì tar's:

$ tar zxf damaged.tar.gz
gzip: damaged.tar.gz: unexpected end of file

Vì vậy, không phải là tarkhông giải nén tệp zip, chỉ là tarnó không có khả năng chuyển nó qua công cụ chính xác, vì thực tế không ai bận tâm thực hiện nó và zip đã hoàn thành chức năng lưu trữ tệp của tệp tar định dạng có ít lý do cho tar để hỗ trợ nó.

Bây giờ, có những công cụ tất cả trong một nén / giải nén mọi thứ bạn ném vào chúng, một lần nữa, bạn cần phải có các công cụ chính xác để thực sự hỗ trợ nó. Nếu bạn không có chúng, công cụ sẽ thất bại.


1
Chà, ngoài việc không ai thực hiện đúng công cụ để vượt qua, không có một: các tệp tar chỉ kết hợp nhiều tệp thành một. Nén là riêng biệt. Vì vậy, các bộ lọc tar ống thông qua chỉ nén / giải nén một tập tin tar duy nhất. Zip hoạt động khác nhau; nó sử dụng một công cụ tích hợp để nén và kết hợp (một chương trình Unix tương tự afio).
derobert

Tôi khuyên bạn nên đề cập đến một vài công cụ nén tất cả trong một tồn tại. Ví dụ: có Gnome file-roller...
derobert

@derobert file-roller chỉ hỗ trợ zip nếu bạn đã cài đặt unzip / zip / p7zip. Nếu không thì cũng vô dụng như tar.
Braiam

tar chỉ hỗ trợ các phiên bản nén khác nhau nếu bạn cũng cài đặt công cụ có liên quan ... Trình quản lý lưu trữ đa định dạng rất hữu ích vì chúng cung cấp cho bạn giao diện nhất quán để xử lý các định dạng lưu trữ khác nhau.
derobert

@derobert chính xác.
Braiam

3

Bản thân một tartệp là một định dạng tệp được thiết kế để lưu trữ băng. Định dạng này sau đó có thể được nén bằng cách sử dụng (ví dụ) gziphoặc bzip2định dạng nén. Khi bạn giải nén một tệp tar đã nén, bạn giải nén nó một cách hiệu quả, sau đó giải nén các tệp gốc từ tartệp không nén .

Khi bạn giải nén một ziptệp không có tartệp nào trong đó, chỉ có tất cả các tệp gốc của bạn. Do đó, không có lý do gì tarđể tham gia vào quá trình này cả.

Bạn cũng có thể nén các tệp bằng cách sử dụng gziphoặc bzip2tự mình giống như bạn có thể tạo ziptệp (không tarliên quan). Khi bạn giải nén các tệp này, bạn có sử dụng gunziphay bunzip2không tar.


1

Như câu trả lời "Một số thứ chỉ là và chúng ta nên chấp nhận chúng" cũng không phù hợp với tôi, tôi chỉ thực hiện một số hoạt động đào (luôn luôn tốt để học một cái gì đó mới phải không?).

Vì vậy, có vẻ như vấn đề là một trong những công cụ đã đi và mục đích của họ là gì.

Thay vì diễn giải những gì tôi tìm thấy và biến các vùng biển cách không cần thiết u ám (pisses obfuscation tôi off), hãy xem bài viết này: http://www.differencebetween.net/technology/difference-between-zip-and-gzip/

Tôi cho rằng tar có thể được xây dựng trong hỗ trợ zip, nhưng các phương pháp rõ ràng là khác nhau về cơ bản. Hoặc có lẽ họ nghĩ tại sao ai đó sẽ sử dụng công cụ lưu trữ này để quản lý các tệp từ một công cụ lưu trữ và nén khác (hoặc có lẽ có một số tranh cãi giữa hai lập trình viên gốc và đã có lệnh cấm không cho phép các khóa kéo qua ranh giới ứng dụng .. vâng tôi đang đùa).

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.