GNU/Linux >> Linux の 問題 >  >> Linux

2 つの tarball のコンテンツを比較する方法

パッケージ間の違いを視覚化するために 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 を使用するシグナル。


Linux
  1. Linux で 2 つの SQLite データベースを比較する方法

  2. AWK を使用して 2 つのファイルをマージする方法は?

  3. 巨大なディレクトリ ツリーを比較する最適な方法

  1. 2 つの XML ファイルを比較するにはどうすればよいですか?

  2. Linux でバイナリ ファイルを比較するにはどうすればよいですか?

  3. ソートされた順序でファイルを tar する方法は?

  1. Linuxで特定のディレクトリまたは別のディレクトリにtarファイルを抽出する方法

  2. Linuxで圧縮ファイルの内容を表示する方法

  3. Linuxでファイルとディレクトリをアーカイブする方法[パート1]