ZIP差分チェッカー(解凍せずに2つのZIPを比べる)
2つのZIPファイルを選ぶと、解凍せずに中身を比べて、 追加・削除・変更・改名されたファイルを一覧にします。 判定にはZIPの目次(中央ディレクトリ)に記録されている CRC-32とサイズを使います。 ファイル全体を読み込まないので、大きなZIPでもすぐ結果が出ます。 ファイルはサーバーに送信されません。
- 入れるもの
- 比べたいZIPファイル2つ(片方だけでも、中身の一覧として使えます)
- 出るもの
- 追加・削除・変更・改名・日時だけの違い・据え置きの件数と一覧/各ファイルのサイズ・圧縮後サイズ・圧縮方式・更新日時・CRC-32/実際に読んだバイト数/CSVでの書き出し
手作業だと手間のかかるところを、そのまま扱います
- 解凍しない … 2つとも展開してフォルダを見比べる必要がありません。ディスクも使いません
- 中身が同じかをCRC-32で見る … 更新日時だけが違うファイルを「変更」と数えません
- 改名を見分ける … 中身が同じで名前だけ変わったものは、追加+削除ではなく改名として出します
- 文字化けするファイル名も読む … UTF-8の印がないZIPはShift_JISとして読み直します
- 全体を読まない … 末尾の目次だけを読むので、1GBのZIPでも実際に読むのは数百KBです
比べるZIPを選ぶ
枠をクリックして選ぶか、ファイルをドラッグして重ねてください。 読み取りはブラウザの中だけで行います。
使い方
- 比較元(A)と比較先(B)にZIPを1つずつ選びます。順番はあとから入れ替えられます。
- 2つそろった時点で自動的に比較します。ボタンを押す操作はありません。
- 結果は「追加・削除・変更・改名・日時だけ・据え置き」に分かれて出ます。
- 件数が多いときは「絞り込み」にパスの一部を入れると、その部分だけに絞れます。
- CSVで書き出すと、表計算ソフトで並べ替えたり、記録として残したりできます。
ZIPと同じ形式のファイルも読めます。.jar、.apk、
.docx、.xlsx、.pptx、
.epub はいずれも中身がZIPなので、
「Wordの文書のどこが変わったか」をファイル単位で見ることもできます。
解凍しなくても比べられる仕組み
ZIPは、ファイルの中身を並べたあと、末尾に「中央ディレクトリ」という目次を置く形式です。 目次には1件ずつ次の情報が入っています。中身そのものは入っていません。
| 目次に入っているもの | このツールでの使い道 |
|---|---|
| ファイル名 | どのファイルどうしを突き合わせるかを決める |
| CRC-32 | 中身から計算した32ビットの検査値。中身が同じかどうかの判定に使う |
| 展開後のサイズ | CRC-32と合わせて同一かを判定する。増減した量も出せる |
| 圧縮後のサイズ | どれだけ縮んでいるかを表示する |
| 圧縮方式 | 無圧縮・Deflate などを表示する |
| 更新日時 | 中身が同じで日時だけ違う場合を分けて出す |
| 汎用フラグ | ファイル名がUTF-8か、暗号化されているかを判定する |
CRC-32は中身から計算された値なので、中身が1バイトでも違えばほぼ確実に別の値になります。 逆に言えば、目次のCRC-32が一致していれば、中身を展開せずに「同じファイル」と判断できます。 このツールがしているのは、2つのZIPの目次を読んで突き合わせることだけです。
さらに、目次はファイルの末尾にあるので、ZIP全体を読む必要もありません。 まず末尾の約64KBを読んで目次の位置を割り出し、その範囲だけを追加で読みます。 結果の画面に出る「読んだバイト数」は、この2回で実際に読んだ量です。
このツールでできること・できないこと
できること
- ファイル単位の追加・削除・変更・改名の判定
- 展開後サイズの増減(何バイト増えたか)
- 更新日時だけが違うファイルの切り分け
- パスワード付きZIPの一覧と比較(中身は読めません)
- ZIP64(4GB超・65,535件超)のZIP
- Shift_JISのファイル名の読み取り
- ZIPと同じ形式のファイル(.docx / .jar / .apk など)
できないこと
- ファイルの中身そのものの差分(何行目が変わったか)は出ません
- CRC-32は32ビットなので、別の中身で一致する可能性が理屈の上では残ります
- 分割された(マルチボリューム)ZIPは読めません
- 目次が壊れているZIPは読めません(理由を表示します)
- ファイルの権限・所有者・シンボリックリンクの違いは見ていません
- 暗号化された項目の中身は読めません
ファイルは送信されません
選んだZIPは、ブラウザがそのまま読み取ります。当サイトのサーバーへも、ほかのどこへも送っていません。
読み取りと比較の処理は zdiff.js というファイルにまとめてあり、
ページを開いた時点で端末に届いています。そのため、
通信を切った状態でも同じように動きます。
社外に出せないファイルを比べるときは、この点を確かめてから使ってください。
よくある質問
なぜ解凍しなくても中身を比べられるのですか?
ZIPは末尾に「中央ディレクトリ」という目次を持っていて、そこに各ファイルの名前・サイズ・更新日時・ CRC-32(中身から計算した32ビットの検査値)がまとめて記録されています。 中身が同じファイルはCRC-32も同じになるため、目次だけを読めば同一かどうかが判定できます。 展開も復元も必要ありません。
大きなZIPでも動きますか?
動きます。このツールはファイル全体を読み込みません。 まず末尾の約64KBを読んで目次の位置を割り出し、その範囲だけを追加で読みます。 1GBのZIPでも実際に読むのは数百KBで済みます。読んだバイト数は結果の画面に表示されます。
ファイルはどこかに送信されますか?
送信されません。読み取りと比較はすべてブラウザの中で行っています。 ZIPの中身が外部に出ることはなく、通信が切れた状態でも動きます。
CRC-32が同じなら中身は必ず同じですか?
32ビットの値なので、理屈の上では別の中身で一致することがありえます。 このツールはCRC-32とサイズの両方が一致したときだけ同一として扱っています。 厳密な一致を確かめたい場合は、展開したうえで SHA-256 などで比べる方法があります。
ファイル名が文字化けするZIPも読めますか?
読めます。ZIPにはファイル名がUTF-8であることを示す印(汎用フラグの11ビット目)があり、 それが立っていない場合は、日本のWindowsで作られたZIPならShift_JISで記録されていることが多いです。 このツールはまず厳密なUTF-8として読み、それで読めないときにShift_JISとして読み直します。 どちらで読んだかは一覧の「名前の文字コード」に表示されます。
パスワード付きのZIPはどうなりますか?
ファイル名・サイズ・更新日時・CRC-32は暗号化されていないため、パスワードなしで一覧と比較ができます。 ただし中身そのものは読めません。暗号化された項目があるときは注意書きを表示します。
フォルダ(ディレクトリ)の項目はどう扱われますか?
差分には出しません。ZIPにはフォルダそれ自体を表す項目が入ることがありますが、 中身を持たないため、増減を数えると実態と合わなくなります。 フォルダの項目は件数だけを一覧の見出しに表示しています。
同じ名前のファイルが2件入っているZIPはどうなりますか?
ZIPの仕様では同じ名前の項目を複数入れることができます。 このツールは名前で突き合わせるため、その場合は後ろにあるものを採ります。 一覧には両方とも表示されるので、件数が合わないときは一覧で確かめられます。