GUI ile oluşturulan ZIP dosyaları bir kabukta oluşturulan ZIP dosyalarından daha fazla bayt içerir


15

Aynı dizinde iki ZIP dosyası oluşturdum . Biri GUI ile, diğeri ile:

$ zip -r alpha_cmd.zip Alpha

Alfa dizin 164 öğelerle 33,640 MB'dir.

GUI tarafından oluşturulan ZIP dosyası, komut satırında oluşturulan ZIP dosyasından 2.100 bayt daha büyüktür.

GUI ile oluşturulan ZIP dosyası neden daha büyük?

Not : ZIP dosyalarının boyutları farklı olsa da, açıldığında, her dizinde aynı sayıda bayt bulunur. Temel olarak, dosya sistemimi GUI ve shell komutlarıyla yöneterek ortaya çıkan olası tutarsızlıklara karşı çok temkinli davranıyorum.


Birinin görünmez dosyaları olabilir, diğeri değil mi?
Tetsujin

Bu SU yanıtından deneyinditto -ck --rsrc --sequesterRsrc --keepParent folder folder.zip
user151019

@ Mark cevap vermeyi unuttum. Bu "ditto" komutu Finder ile tam olarak aynı dosyayı oluşturur. Ve ditto / zip / "Finder ZIP" dosyalarının hepsi çapraz platformdur. Zamanınız ve çabanız için teşekkür ederiz.
david

Yanıtlar:


20

Finder'dan sıkıştırıldığında, Mac'lerde görünmeyen, özel simgeler ve benzeri gibi OS X kaynak çatallarını içeren bir __MACOSX klasörü eklenir. Gönderen Vikipedi :

Kaynak çatalı, Apple Mac OS işletim sistemindeki, yapılandırılmış verileri veri çatalı içinde depolanan yapılandırılmamış verilerle birlikte depolamak için kullanılan bir çatalı veya bir bölümüdür. Bir kaynak çatalı, simge bitmap'leri, pencerelerin şekilleri, menülerin tanımları ve içerikleri ve uygulama kodu (makine kodu) gibi bilgileri içeren belirli bir formdaki bilgileri saklar. Örneğin, bir kelime işlemci dosyası, metni gömülü görüntüleri aynı dosyanın kaynak çatalına kaydederken, veri çatalı içinde saklayabilir. Kaynak çatalı çoğunlukla yürütülebilir dosyalar tarafından kullanılır, ancak her dosyanın bir kaynak çatalı olabilir.


6
Küçük düzeltme: Sadece kaynak çatalları değil, zip biçiminin AppleDouble biçiminde kodlanmış olarak yerel olarak işlemediği her türlü dosya meta verisi . Buna spotlight yorumları, etiketler, Finder bayrakları, karantina verileri vb. İle kaynak çatalları dahildir.
Gordon Davisson

Ve birçok fermuarında "__MACOSX" klasörünün ne olduğunu merak ediyordum ... Ne kadar çok bilirsen, ha?
Ave

Cevabı aydınlatabilecek başka bir referans: stackoverflow.com/questions/107903/…
DA Vincent

4

Bu durumda ana nedenden ayrı olarak bile (bulucu, empedokülün söylediği gibi ekstra gizli şeyler ekleyerek), aynı verilerin ZIP'leri için farklı boyutlar, boyut farkı bir yüzde oranı olduğunda bir sorun olduğunu göstermez.

Farklı ZIP uygulamaları farklı bir varsayılan sıkıştırma düzeyine (CPU zamanı ile kaydedilen boyut arasında denge) sahip olabilir veya yalnızca daha fazla veya daha az eşleşme kaydederek varsayılan sıkıştırma düzeyinde daha fazla veya daha az bayt tasarrufu sağlayan farklı bir kod içerebilir.

Örneğin, 7-Zip genellikle .zipdiğer ZIP programlarından daha küçük dosyalar oluşturur. (Ve hayır, kendi .7zdosya biçiminden bahsetmiyorum . Daha iyi bir düz ZIP kompresörüne de sahip.)

zipcmp ZIP dosyalarını karşılaştırabilen bir cmdline programıdır. Tüm dosyaların aynı ad, boyut ve CRC olup olmadığını kontrol etmek için varsayılan olarak sadece ZIP dizinini karşılaştırmaktır . Bu durumda, her iki ZIP dosyasının da aynı içeriğe sahip olduğu neredeyse kesindir, ancak sadece farklı şekilde sıkıştırılır (sıkıştırılmış boyut farklıysa.) ZIP dosyaları zarar görmediği sürece elbette. unzip -t foo.zipBir ZIP dosyasını dekompresyon hataları, eşleşmeyen CRC'ler vb. Açısından test etmek için kullanın .


__MACOSX klasörleri CRC hesaplamasını etkilemez mi?
Kent

1
ZIP, sıkıştırılmış her dosyanın sıkıştırılmamış içeriğini ayrı bir CRC'de saklar. (Hayır, iki nedenden ötürü: dizinler yalnızca kendi dosyalarını içeren bir veri bloğu değil, başka dosyalar da içerir. Ve ikincisi, ZIP meta verilerinde saklanan CRC'ler her dosya için ayrı ayrıdır.) Yani, aynı dosyalar iki ZIP dosyası CRC ve sıkıştırılmış boyutta eşleşir.
Peter Cordes

@PeterCordes Farklı ZIP uygulamalarının farklı dosya boyutları üretebilmesi tam olarak dikkatimi çekti. Kabuğun "/ usr / bin / zip" yürüttüğünü biliyordum. Ancak Finder bana farklı bir dosya boyutu verdiğinden, Finder'ın tamamen farklı bir yürütülebilir dosya kullandığını düşündüm (ve bu benim için üzgündü). Kökün nasıl sulanacağını biliyor ve biraz cesaretim olsaydı, bir test olarak "/ usr / bin / zip" i "/ tmp" ye taşırdım ve sonra bir Finder zip'i deneyebilirim (ve bir hata daha iyi olur). Ancak, yapmak için çalışıyorum ve Mac'imin dengesini bozma riskini alamıyorum!
david

Geçici olarak /usr/bin/zipfarklı bir sürümle değiştirmenin en güvenli yolu olacaktır ln /usr/bin/zip /usr/bin/zip.standard; mv new_zip /usr/bin/zip. Bu şekilde, her zaman bir /usr/bin/zipa'ya sahip olursunuz , çünkü sistem uygulamasını atomik olarak değiştirirsiniz. Ayrıca, eski sürüm sadece yeniden adlandırıldı, taşınmadı /tmp(muhtemelen farklı bir dosya sisteminde olabilir.) Devre dışı bırakmak için, sadece adını değiştiririm zip.disab, Finder'ın kırılıp kırılmadığına bakın, sonra yeniden adlandırın. Ancak zip oluşturma kitaplığı işlevleri yaygındır. Bulucu neredeyse kesinlikle çatal / exec değil /usr/bin/zip.
Peter Cordes

@PeterCordes Yürütülebilir dosya yerine kütüphaneleri çağırmayla ilgili. Ancak, yürütülebilir dosya zaten "/ usr / bin / zip" değil, "/ usr / bin / ditto" olurdu. Bu forumdan yardım harika. Zamanınız ve çabanız için teşekkür ederiz.
david
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.