File ZIP yang dibuat dengan GUI memiliki lebih banyak byte daripada file ZIP yang dibuat dalam sebuah shell

15

Saya membuat dua file ZIP dari direktori yang sama. Satu dengan GUI, yang lain dengan:

$ zip -r alpha_cmd.zip Alpha

Direktori Alpha adalah 33,640 MB dengan 164 item.

File ZIP yang dibuat oleh GUI adalah 2,100 byte lebih besar dari file ZIP yang dibuat pada baris perintah.

Mengapa file ZIP dibuat dengan GUI lebih besar?

Catatan : Meskipun file ZIP memiliki ukuran yang berbeda, ketika membuka ritsleting, direktori masing-masing memiliki jumlah byte yang sama persis. Pada dasarnya, saya sangat waspada terhadap kemungkinan inkonsistensi yang diperkenalkan dengan mengelola sistem file saya dengan GUI dan dengan perintah shell.

David
sumber
Satu mungkin memiliki file yang tidak terlihat, yang lain tidak?
Tetsujin
Dari jawaban SU ini cobaditto -ck --rsrc --sequesterRsrc --keepParent folder folder.zip
user151019
@ Mark saya lupa menjawab. Perintah "ditto" itu memang membuat file yang sama persis dengan Finder. Dan file yang ditto / zip / "Finder ZIP" semuanya lintas platform. Terima kasih atas waktu dan usaha Anda.
david

Jawaban:

20

Zip dari Finder menambahkan folder __MACOSX, tidak terlihat di Mac, yang berisi garpu sumber daya OS X seperti ikon khusus dan semacamnya. Dari Wikipedia :

Garpu sumber daya adalah garpu atau bagian dari file pada sistem operasi Apple Mac OS yang digunakan untuk menyimpan data terstruktur bersama dengan data tidak terstruktur yang disimpan dalam garpu data. Garpu sumber daya menyimpan informasi dalam bentuk tertentu, berisi rincian seperti bitmap ikon, bentuk jendela, definisi menu dan isinya, dan kode aplikasi (kode mesin). Misalnya, file pengolah kata mungkin menyimpan teksnya dalam fork data, sambil menyimpan gambar yang disematkan di fork sumber daya file yang sama. Garpu sumber daya sebagian besar digunakan oleh executables, tetapi setiap file dapat memiliki garpu sumber daya.

empedocle
sumber
6
Koreksi kecil: ini bukan hanya fork resource, ini semua jenis metadata file yang format zipnya tidak ditangani secara asli, disandikan dalam format AppleDouble . Itu akan mencakup komentar sorotan, tag, bendera Finder, data karantina, dll, serta garpu sumber daya.
Gordon Davisson
Dan saya bertanya-tanya apa folder "__MACOSX" di sebagian besar ritsleting ... Semakin banyak Anda tahu, eh?
Ave
Referensi lain yang mungkin menerangi jawabannya: stackoverflow.com/questions/107903/…
DA Vincent
4

Bahkan terlepas dari penyebab utama dalam kasus ini (Finder menambahkan hal-hal tersembunyi tambahan, seperti kata empedocle), ukuran berbeda untuk ZIP dari data yang sama tidak menunjukkan masalah, ketika perbedaan ukuran adalah sebagian kecil dari persen.

Implementasi ZIP yang berbeda mungkin memiliki tingkat kompresi standar yang berbeda (pertukaran antara waktu dan ukuran CPU disimpan), atau hanya memiliki kode berbeda yang menyimpan lebih banyak atau lebih sedikit kecocokan, menyimpan lebih banyak atau lebih sedikit byte pada tingkat kompresi standar.

Misalnya, 7-Zip biasanya membuat .zipfile lebih kecil dari program ZIP lainnya. (Dan tidak, saya tidak berbicara tentang .7zformat file sendiri . Ini memiliki kompresor ZIP-polos yang lebih baik juga.)

zipcmp adalah program cmdline yang dapat membandingkan file ZIP. Defaultnya adalah membandingkan hanya direktori ZIP, untuk memeriksa apakah semua file memiliki nama, ukuran, dan CRC yang sama . Jika ini masalahnya, kedua file ZIP hampir pasti memiliki konten yang sama, tetapi hanya dikompres secara berbeda (jika ukuran terkompresi berbeda.) Selama file ZIP tidak rusak, tentu saja. Gunakan unzip -t foo.zipuntuk menguji file ZIP untuk kesalahan dekompresi, CRC yang tidak cocok, dll.

Peter Cordes
sumber
Bukankah folder __MACOSX memengaruhi perhitungan CRC?
Kent
1
ZIP menyimpan CRC terpisah konten yang tidak dikompresi dari setiap file terkompresi. (Jadi tidak, karena dua alasan: direktori hanya berisi file lain, bukan blok data sendiri. Dan dua, CRC yang disimpan dalam metadata ZIP adalah untuk setiap file secara terpisah.) Jadi, semua file yang sama antara dua file ZIP akan cocok dengan CRC dan ukuran terkompresi.
Peter Cordes
@PeterCordes Fakta bahwa implementasi ZIP yang berbeda dapat menghasilkan ukuran file yang berbeda adalah hal yang menarik perhatian saya. Saya tahu bahwa shell mengeksekusi "/ usr / bin / zip". Tapi karena Finder memberi saya ukuran file yang berbeda, saya pikir Finder menggunakan executable yang sama sekali berbeda (dan itu mengecewakan saya). Jika saya tahu cara su root dan memiliki keberanian, sebagai tes saya akan memindahkan "/ usr / bin / zip" ke "/ tmp", dan kemudian coba zip Finder (dan lebih baik mengeluarkan kesalahan). Tapi, saya sudah bekerja dan tidak bisa mengambil risiko mendestabilisasi Mac saya!
david
Cara teraman untuk mengganti sementara /usr/bin/zipdengan versi yang berbeda adalah ln /usr/bin/zip /usr/bin/zip.standard; mv new_zip /usr/bin/zip. Dengan begitu, Anda selalu memiliki /usr/bin/zip, karena Anda secara atom mengganti implementasi sistem. Juga, versi lama hanya diganti namanya, tidak dipindahkan ke /tmp(yang mungkin berada pada sistem file yang berbeda.) Untuk menonaktifkannya, saya hanya mengubah nama menjadi zip.disab, melihat apakah Finder rusak, lalu ganti nama itu kembali. Tetapi fungsi pustaka zip-penciptaan adalah umum. Finder hampir pasti tidak melakukan fork / exec /usr/bin/zip.
Peter Cordes
@PeterCordes Saya mengerti tentang memanggil perpustakaan alih-alih yang dapat dieksekusi. Tetapi, yang dapat dieksekusi adalah "/ usr / bin / ditto", dan bukan "/ usr / bin / zip". Bantuan dari forum ini sangat bagus. Terima kasih atas waktu dan usaha Anda.
david