パッケージ間の違いを視覚化するために pkgdiff も試してください (追加/削除/名前変更されたファイルと変更されたコンテンツを検出し、変更されていない場合はコードなしで存在します):
pkgdiff PKG-0.tgz PKG-1.tgz
これらの tar ファイルの作成を制御していますか?
その場合、MD5 チェックサムを作成してファイルに保存するのが最善の策です アーカイブ自体の中に。次に、2 つのファイルを比較する場合は、このチェックサム ファイルを抽出して比較します。
tar ファイルを 1 つだけ抽出する余裕がある場合 、--diff
を使用できます tar
のオプション 他の tar ファイルの内容との違いを探します。
もう 1 つの大雑把なトリック ファイル名とそのサイズの比較だけで問題ない場合 .
これは、他のファイルが同じであることを保証するものではないことに注意してください!
tar tvf
を実行する 各ファイルの内容を一覧表示し、出力を 2 つの異なるファイルに保存します。次に、ファイル名とサイズの列以外のすべてを切り出します。できれば、2 つのファイルも並べ替えてください。次に、2 つのリスト間でファイルの diff を実行します。
この最後のスキームは実際にはチェックサムを実行しないことに注意してください。
tar と出力のサンプル (この例では、すべてのファイルのサイズはゼロです)。
$ tar tvfj pack1.tar.bz2
drwxr-xr-x user/group 0 2009-06-23 10:29:51 dir1/
-rw-r--r-- user/group 0 2009-06-23 10:29:50 dir1/file1
-rw-r--r-- user/group 0 2009-06-23 10:29:51 dir1/file2
drwxr-xr-x user/group 0 2009-06-23 10:29:59 dir2/
-rw-r--r-- user/group 0 2009-06-23 10:29:57 dir2/file1
-rw-r--r-- user/group 0 2009-06-23 10:29:59 dir2/file3
drwxr-xr-x user/group 0 2009-06-23 10:29:45 dir3/
ソートされた名前/サイズ リストを生成するコマンド
$ tar tvfj pack1.tar.bz2 | awk '{printf "%10s %s\n",$3,$6}' | sort -k 2
0 dir1/
0 dir1/file1
0 dir1/file2
0 dir2/
0 dir2/file1
0 dir2/file3
0 dir3/
このようなソートされたリストを 2 つ取り、それらを比較できます。
都合がよければ、日付と時刻の列を使用することもできます。
編集:@StéphaneGourichon によるコメントを参照
これは返信が遅いことを認識していますが、同じことを達成しようとしているときにスレッドに出くわしました。私が実装したソリューションは、tar を stdout に出力し、選択したハッシュにパイプします:
tar -xOzf archive.tar.gz | sort | sha1sum
引数の順序が重要であることに注意してください。特に O
stdout を使用するシグナル。