GUIで作成したZIPファイルは、シェルで作成したZIPファイルよりもバイト数が多くなります。


15

2つ作成しました ZIP 同じディレクトリのファイル。 1つはGUI、もう1つは次のものです。

$ zip -r alpha_cmd.zip Alpha

アルファ ディレクトリは164項目で33.640メガバイトです。

GUIによって作成されたZIPファイルは、コマンドラインで作成されたZIPファイルより2,100バイト大きくなります。

なぜGUIで作成されたZIPファイルが大きくなるのですか?

注意 :ZIPファイルはサイズが異なりますが、解凍すると、それぞれのディレクトリのバイト数はまったく同じになります。基本的に、私はファイルシステムをGUIとシェルコマンドで管理することによって生じる可能性のある矛盾に非常に用心しています。


一方は見えないファイルを持っているかもしれませんが、他方はそうではありません?
Tetsujin

これから SUの答え やってみる ditto -ck --rsrc --sequesterRsrc --keepParent folder folder.zip
Mark

@マーク私は返事をするのを忘れました。その「同上」コマンドは、Finderとまったく同じファイルを作成します。そして同上/ zip / "Finder ZIP"ファイルはすべてクロスプラットフォームです。あなたの時間と努力をありがとう。
david

回答:


20

Macからは見えないフォルダ__MACOSXを追加すると、カスタムアイコンなどのOS Xリソースフォークが含まれます。から ウィキペディア

リソースフォークは、データフォーク内に格納されている非構造化データとともに構造化データを格納するために使用されるApple Mac OSオペレーティングシステム上のファイルのフォークまたはセクションです。リソースフォークは、アイコンビットマップ、ウィンドウの形状、メニューとその内容の定義、およびアプリケーションコード(マシンコード)などの詳細を含む特定の形式で情報を格納します。たとえば、ワープロファイルはテキストをデータフォークに格納し、埋め込まれた画像は同じファイルのリソースフォークに格納します。リソースフォークは主に実行可能ファイルによって使用されますが、すべてのファイルはリソースフォークを持つことができます。


6
細かい修正:リソースフォークだけではなく、zip形式ではネイティブに処理できない、あらゆる種類のファイルメタデータでエンコード AppleDouble フォーマット。これには、スポットライトのコメント、タグ、Finderのフラグ、隔離データなど、リソースフォークが含まれます。
Gordon Davisson

そして、私はほとんどのzipファイルの "__MACOSX"フォルダが何であるか疑問に思っていました...もっと知っている、え?
Ave

答えを照らすかもしれない別の参考文献: stackoverflow.com/questions/107903/…
D A Vincent

4

この場合の主な原因(empedocleが言っているように、Finderが余分な隠しファイルを追加する)を除いても、サイズの違いがパーセントの何分の1かであれば、同じデータのZIPのサイズが異なっても問題ありません。

ZIP実装が異なれば、デフォルトの圧縮レベルが異なる(節約されるCPU時間とサイズとの間のトレードオフ)、または一致をより多くまたはより少なくし、デフォルトの圧縮レベルでより多くまたはより少ないバイトを節約する異なるコードがあります。

例えば、 7-Zip 通常小さくなります .zip 他のZIPプログラムよりもファイル。 (いいえ、私は自分自身について話していない .7z ファイルフォーマットそれはより良いプレーンZIP圧縮機も持っています。)

zipcmp ZIPファイルを比較することができますcmdlineプログラムです。デフォルトではZIPディレクトリだけを比較し、すべてのファイルが同じ名前、サイズ、 CRC 。この場合、両方のZIPファイルの内容はほぼ同じですが、圧縮率が異なる場合は圧縮率が異なります。もちろん、ZIPファイルが破損していなければ、当然です。つかいます unzip -t foo.zip ZIPファイルの解凍エラー、一致しないCRCなどをテストする


__MACOSXフォルダはCRCの計算に影響しませんか?
Kent

1
ZIPは、各圧縮ファイルの非圧縮コンテンツを別々のCRCに格納します。 2つの理由で、ZIPメタデータに格納されているCRCは、各ファイルごとに別々になっています。 2つのZIPファイルはCRCと解凍されたサイズで一致します。
Peter Cordes

@PeterCordes異なるZIP実装が異なるファイルサイズを生成できるという事実はまさに私の注意を引いたものです。私はシェルが "/ usr / bin / zip"を実行したことを知っていました。しかし、Finderが私に別のファイルサイズを与えてくれたので、私はFinderが全く別の実行可能ファイルを使ったと思った(そしてそれは私を悩ませていた)。どうすればよいのでしょうか。rootとしてsuの使い方を知っていて、勇気があれば、テストとして "/ usr / bin / zip"を "/ tmp"に移動してからFinder zipを試してください(そしてエラーを発行するほうが良いです)。しかし、私はやるべきことをしており、私のMacを不安定にさせる危険性はありません!
david

一時的に置き換える最も安全な方法 /usr/bin/zip 別のバージョンでは ln /usr/bin/zip /usr/bin/zip.standard; mv new_zip /usr/bin/zip。そのように、あなたはいつも持っています /usr/bin/zipこれは、システム実装をアトミックに置き換えたためです。また、古いバージョンは単に名前が変更され、に移動されません。 /tmp 無効にするには、名前を変更します。 zip.disab、Finderが壊れるかどうかを確認してから、名前を変更しますしかし、zip作成ライブラリ関数は一般的です。 Finderはほぼ確実にfork / execしません /usr/bin/zip
Peter Cordes

@PeterCordes実行可能ファイルではなくライブラリを呼び出すことについて説明します。しかし、実行可能ファイルは、 "/ usr / bin / zip"ではなく、 "/ usr / bin / ditto"になっていたはずです。このフォーラムからの支援は素晴らしいです。あなたの時間と努力をありがとう。
david
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.