Các tệp ZIP được tạo bằng GUI có nhiều byte hơn các tệp ZIP được tạo trong trình bao


15

Tôi đã tạo ra hai Mã bưu điện các tập tin của cùng một thư mục. Một cái có GUI, cái còn lại có:

$ zip -r alpha_cmd.zip Alpha

Các Alpha thư mục là 33.640 MB với 164 mục.

Tệp ZIP được tạo bởi GUI lớn hơn 2.100 byte so với tệp ZIP được tạo trên dòng lệnh.

Tại sao tệp ZIP được tạo bằng GUI lớn hơn?

chú thích : Mặc dù các tệp ZIP có kích thước khác nhau, nhưng khi được giải nén, mỗi thư mục có cùng số byte chính xác. Về cơ bản, tôi rất cảnh giác với những mâu thuẫn có thể xảy ra bằng cách quản lý hệ thống tệp của mình bằng GUI và bằng các lệnh shell.


Một cái có thể có tập tin vô hình, cái kia không?
Tetsujin

Từ đây Câu trả lời SU thử ditto -ck --rsrc --sequesterRsrc --keepParent folder folder.zip
Mark

@Mark Tôi quên trả lời. Lệnh "ditto" đó tạo ra cùng một tệp chính xác như Finder. Và các tập tin ditto / zip / "Finder ZIP" đều là nền tảng chéo. Cảm ơn bạn đã dành thời gian và nỗ lực của bạn.
david

Câu trả lời:


20

Nén từ Finder sẽ thêm một thư mục __MACOSX, vô hình trên máy Mac, có chứa các tài nguyên OS X như các biểu tượng tùy chỉnh, v.v. Từ Wikipedia :

Ngã ba tài nguyên là một ngã ba hoặc một phần của tệp trên hệ điều hành Apple Mac OS được sử dụng để lưu trữ dữ liệu có cấu trúc cùng với dữ liệu phi cấu trúc được lưu trữ trong ngã ba dữ liệu. Một ngã ba tài nguyên lưu trữ thông tin trong một hình thức cụ thể, chứa các chi tiết như bitmap biểu tượng, hình dạng của các cửa sổ, định nghĩa của menu và nội dung của chúng và mã ứng dụng (mã máy). Ví dụ: một tệp xử lý văn bản có thể lưu trữ văn bản của nó trong ngã ba dữ liệu, trong khi lưu trữ bất kỳ hình ảnh nhúng nào trong cùng một ngã ba tài nguyên của cùng một tệp. Ngã ba tài nguyên được sử dụng chủ yếu bởi các tệp thực thi, nhưng mọi tệp đều có thể có một ngã ba tài nguyên.


6
Sửa lỗi nhỏ: không chỉ là các nhánh tài nguyên, tất cả các loại siêu dữ liệu tệp mà định dạng zip không xử lý được, được mã hóa trong AppleDouble định dạng. Điều đó sẽ bao gồm các bình luận nổi bật, thẻ, cờ Finder, dữ liệu kiểm dịch, vv cũng như các tài nguyên.
Gordon Davisson

Và tôi đã tự hỏi thư mục "__MACOSX" trong hầu hết các khóa là gì ... Bạn càng biết nhiều hơn, eh?
Ave

Một tài liệu tham khảo khác có thể chiếu sáng câu trả lời: stackoverflow.com/questions/107903/
D A Vincent

4

Ngay cả ngoài nguyên nhân chính trong trường hợp này (Finder thêm các nội dung ẩn khác, như empedocle nói), các kích thước khác nhau cho các ZIP của cùng một dữ liệu không chỉ ra vấn đề, khi chênh lệch kích thước là một phần trăm.

Các cài đặt ZIP khác nhau có thể có mức nén mặc định khác nhau (cân bằng giữa thời gian và kích thước CPU được lưu) hoặc chỉ có mã khác nhau giúp tiết kiệm nhiều hoặc ít kết quả khớp, tiết kiệm nhiều hơn hoặc ít byte hơn ở mức nén mặc định.

Ví dụ, 7-Zip thường làm nhỏ hơn .zip tập tin hơn các chương trình ZIP khác. (Và không, tôi không nói về chính nó .7z định dạng tập tin. Nó cũng có một máy nén ZIP đơn giản tốt hơn.)

zipcmp là một chương trình cmdline có thể so sánh các tệp ZIP. Nó mặc định chỉ so sánh thư mục ZIP, để kiểm tra xem tất cả các tệp có cùng tên, kích thước và CRC . Nếu đây là trường hợp, cả hai tệp ZIP hầu như chắc chắn có cùng một nội dung, nhưng chỉ được nén khác nhau (nếu kích thước nén khác nhau.) Tất nhiên, miễn là các tệp ZIP không bị hỏng. Sử dụng unzip -t foo.zip để kiểm tra tệp ZIP để tìm lỗi giải nén, CRC không khớp, v.v.


Các thư mục __MACOSX có ảnh hưởng đến tính toán CRC không?
Kent

1
ZIP lưu trữ một CRC riêng nội dung chưa nén của mỗi tệp nén. (Vì vậy, vì hai lý do: thư mục chỉ chứa các tệp khác, không phải là khối dữ liệu của riêng họ. Và hai, CRC được lưu trữ trong siêu dữ liệu ZIP dành cho mỗi tệp riêng biệt.) hai tệp ZIP sẽ khớp với CRC và kích thước giải nén.
Peter Cordes

@PeterCordes Thực tế là việc triển khai ZIP khác nhau có thể tạo ra các kích thước tệp khác nhau chính xác là điều khiến tôi chú ý. Tôi biết rằng trình bao thực thi "/ usr / bin / zip". Nhưng vì Finder đã cho tôi một kích thước tệp khác, tôi nghĩ Finder đã sử dụng một tệp thực thi hoàn toàn khác (và điều đó làm tôi khó chịu). Nếu tôi biết cách sử dụng root và có một chút can đảm, như một bài kiểm tra tôi sẽ chuyển "/ usr / bin / zip" sang "/ tmp", sau đó thử một zip Finder (và tốt hơn là nó sẽ phát sinh lỗi). Nhưng, tôi đã làm việc để làm và không thể mạo hiểm gây mất ổn định cho máy Mac của mình!
david

Cách an toàn nhất để tạm thời thay thế /usr/bin/zip với một phiên bản khác sẽ là ln /usr/bin/zip /usr/bin/zip.standard; mv new_zip /usr/bin/zip. Bằng cách đó, bạn luôn có một /usr/bin/zip, bởi vì bạn nguyên tử thay thế việc thực hiện hệ thống. Ngoài ra, phiên bản cũ chỉ được đổi tên, không được chuyển sang /tmp (có thể có trên một hệ thống tập tin khác.) Để vô hiệu hóa nó, tôi chỉ cần đổi tên nó thành zip.disab, xem nếu Finder phá vỡ, sau đó đổi tên lại. Nhưng các chức năng thư viện tạo zip là phổ biến. Finder gần như chắc chắn không fork / exec /usr/bin/zip.
Peter Cordes

@PeterCordes Tôi hiểu điều đó về việc gọi các thư viện thay vì thực thi. Nhưng, tệp thực thi sẽ là "/ usr / bin / ditto" chứ không phải "/ usr / bin / zip". Sự hỗ trợ từ diễn đàn này là rất tốt. Cảm ơn bạn đã dành thời gian và nỗ lực của bạn.
david
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.