2つの Zip ファイルの中に含まれるファイルの差分(diff)を直接調べる方法

自分用メモ。

a.zip と b.zip があって、それぞれ x というファイルが含まれているとします。
a.zip の中の x と b.zip の中の x を比較したい場合、以下のようなワンライナーで比較することができます。

$ diff <(unzip -p a.zip x) <(unzip -p b.zip x)

もちろん、zip ファイルはファイル名だけじゃなくてディレクトリもあわせてパスとして指定することもできますし、zip の中のファイルも dir/to/x のように書けばzip内のディレクトリを指定できます。

< と ( の間に空白を開けるとエラーになりますので要注意。

また、zip 以外にも他の圧縮方式でもおそらく同じようなことができると思います。
unzip コマンドは ーp で標準出力にファイルを出力してくれます。他の圧縮方式用のコマンドでも同じようなオプションがあると思います。


このようにすると、いちいちテンポラリディレクトリを作って展開してから比較とかしなくてよいので気軽に比較できますし、後片付けしなくてもよいのですっきりですね。