diff操作を実行するときにファイルのタイムスタンプを無視する方法

diff操作を実行するときにファイルのタイムスタンプを無視する方法

me.txtテキストという名前のファイルを作成しました。

This is dummy text

次に、TARを作成し、名前をme.txt.tar

しばらくして、まったく同じ名前とテキスト(デフォルトで私がしたことtouch me.txt)でファイルを再生成して、.tarというTARファイルにしましたme2.txt.tar

技術的に、両方のtarは同じファイルと同じファイルの内容を持っていますが、ファイルはme.txt異なる時間に作成されました。しかし、diffツールは次のように言います。

Binary files me.txt.tar and me2.txt.tar differ

これはファイル生成タイムスタンプの違いによって発生します。しかし、ファイルの内容だけを比較してタイムスタンプは無視すればよいので、違いに対する出力はないと予想されます。

ファイルの内容に興味があるので、TARやJARなどのファイル内のファイルのタイムスタンプを無視するのに役立ちます。

  • 私が使用するコマンドは次のとおりです。
    $ echo "This is dummy text" > me.txt
    $ tar -cvf me.txt.tar me.txt
    (After 1 minute or so..)
    $ touch me.txt 
    $ tar -cvf me2.txt.tar me.txt
    $ diff me.txt.tar me2.txt.tar
    
  • 出力:
    Binary files me.txt.tar and me2.txt.tar differ
    

diffoscope同様の出力を提供します。

答え1

アーカイブ自体のメタデータではなく、アーカイブ内のファイルの内容を比較したいので、内容を比較する必要があります。すべてのアーカイブのファイルが同じ順序で保存されていると仮定すると、

diff -u <(tar xOf me.txt.tar) <(tar xOf me2.txt.tar)

JARの場合は、次のものを使用できますunzip

diff -u <(unzip -c file1.jar) <(unzip -c file2.jar)

関連情報