2012-11-09 24 views
7

Tôi đang cố gắng nén nội dung của một thư mục chứa 4 tệp lớn, rất, rất giống nhau. Vì vậy, tôi mong đợi kích thước được giảm.zip xì hơi 0%? Tại sao không nén?

Dưới đây là các lệnh Tôi đang sử dụng trên Linux/fedora:

zip -9 myarchive.zip -r myfolder -P mypassword 

tôi nhận được câu trả lời:

adding: myfolder/ (stored 0%) 
adding: myfolder/Program1.exe (deflated 0%) 
adding: myfolder/Program2.exe (deflated 0%) 
adding: myfolder/Program3.exe (deflated 0%) 
adding: myfolder/Program4.exe (deflated 0%) 

Sau đó, tôi nhận được lưu trữ, đó là xấp xỉ kích thước giống như ban đầu của tôi thư mục.

Dường như không có nén nào xảy ra. Tại sao?

+0

Điều gì sẽ xảy ra khi bạn bỏ qua '-P mypassword'? –

+2

Không phải tất cả dữ liệu đều có thể được nén. –

+0

cũng giống như vậy khi tôi bỏ qua -P mypassword. –

Trả lời

7

Không giống như tar + gzip, zip sử dụng bảng nén mới cho mỗi tệp, vì vậy ngay cả khi bốn tệp giống hệt nhau, nó sẽ cố gắng nén riêng từng tệp.

Về mặt kỹ thuật, tar cũng thấy mỗi tập tin nhưng nó Strings chúng lại với nhau thành một đầu vào dài cho gzip, vì vậy bước nén hoạt động trên một đầu vào rất lớn đó là lý do tar + gzip thường mang lại một kết quả nhỏ hơn zip.

Câu hỏi đặt ra là tại sao không thể nén các tệp exe của bạn. exe tệp thường chứa một lượng lớn dữ liệu nén dễ dàng, vì vậy chúng sẽ thu nhỏ ("giảm phát") ít nhất 30%. Có thể các tệp được mã hóa hoặc bị làm mờ; các quá trình này làm cho kết quả khó nén.

+0

Cảm ơn, điều đó có ý nghĩa sau đó, nếu zip nén riêng từng tệp. Các tập tin được tự trích xuất exe, chúng chứa một thực thi nhỏ + một thư viện nén lớn của các tập tin dll + một số hình ảnh. Hình ảnh và thư viện đã được nén và gần như giống nhau cho mỗi tệp. –

2

Một số tệp không thể nén được, đặc biệt nếu entropy của chúng cao. Điều này xảy ra khi phân phối thống kê byte thậm chí (ví dụ: khi byte 0 xuất hiện thường xuyên như byte 1 dưới dạng byte 2 ...). Điều này xảy ra đối với nội dung đã nén. Một số định dạng video hoặc âm thanh thuộc danh mục đó.

+0

Tôi nghĩ rằng mỗi tệp có entropy cao, nhưng chúng rất giống nhau. Có thể có sự khác biệt nhỏ hơn 1% giữa hai tệp đã cho. Vì vậy, có rất nhiều dự phòng khi xem xét toàn bộ thư mục. –

+0

Và "deflated 0%" có nghĩa là gì? Tôi quên hỏi trong bài viết gốc. Cảm ơn bạn đã giúp đỡ. –

2

Aaron là chính xác. Theo Wikipedia, định dạng ZIP nén trước khi lưu trữ, vì vậy các điểm tương đồng giữa các tệp khác nhau không giúp nén.

Bạn có thực sự muốn nén .exe tệp không? Bằng cách nào đó tôi nghi ngờ đó là loại tệp thực sự của bạn.

Xem http://en.wikipedia.org/wiki/ZIP_(file_format)#Advantages_and_disadvantages.

+0

Cảm ơn bạn đã nhập và liên kết. Có các tệp của tôi là các tệp exe có thể trích xuất (xem trả lời của tôi cho Aaron). Cảm ơn vì đã dành thời gian cho tôi! –

2

Xì hơi 0% có nghĩa là nó đã cố nén, nhưng hiệu quả không nén. Như đã lưu ý, định dạng zip không thể tận dụng sự giống nhau giữa các mục nhập khác nhau. tar + gzip có thể, nhưng thậm chí sau đó chỉ khi các điểm tương đồng kết thúc cách nhau ít hơn 32K byte. Các định dạng khác có thể khai thác các điểm tương đồng khoảng cách dài hơn, chẳng hạn như xz.

Điều này là bình thường đối với các tệp thi hành không nén được nén từ 30% đến 50%, có nghĩa là tệp thi hành của bạn là a) được nén bởi một cái gì đó như UPX, b) chúng tự giải nén dữ liệu đã nén. của dữ liệu nén, c) chúng là các tệp thực thi rất ngắn với rất nhiều dữ liệu nén hoặc d) chúng hầu hết được mã hóa.