web-dev-qa-db-ja.com

2つのtarアーカイブ(ファイルコンテンツ、新規/削除されたファイル、シンボリックリンクを含む)を比較するにはどうすればよいですか?

2つのtarアーカイブ(圧縮または非圧縮)があり、2つのアーカイブのすべての違いを見つけたいと思います。両方のアーカイブには完全なファイルシステムが含まれています(つまり、解凍すると、/bin/home/root/usr/var/etc、...などのディレクトリが生成されます)。次のリストが欲しいのですが。

  • 新しいファイル
  • 削除されたファイル
  • 変更されたファイル(サイズだけでなくファイルの内容)
  • 変更されたシンボリックリンク(相対および絶対の両方)
  • 新規/削除されたシンボリックリンク

Diffは絶対シンボリックリンクを正しく認識しないため(アーカイブのファイルシステム構造を指し示すため)、これらのアーカイブを解凍してdiffを使用することはできません。

2つのtarアーカイブのコンテンツを比較する別の方法はありますか?

3
Alex

比較するシンボリックリンクがある場合、diffから何か役立つものは得られないと思います。すべてを一度に実行するのではなく、2つの別々のパスを実行します。1つはメタデータを比較するため、もう1つはファイルの内容を比較するためです。

エキゾチックなファイル名がない場合は、tar -tvまたはpax -vの出力を単純に比較するだけでメタデータ部分に対応できます。 bash/ksh/zshの場合:

pax -v <(archive1.tar) <(archive2.tar)

アーカイブの内容については、 avfs でマウントし、2つのディレクトリツリーを比較します。

mountavfs
diff -urN ~/.avfs$PWD/archive1.tar\#/ ~/.avfs$PWD/archive2.tar\#/