如何在执行 diff 操作时忽略文件的时间戳

如何在执行 diff 操作时忽略文件的时间戳

me.txt我创建了一个以文本命名的文件

This is dummy text

然后我用它制作了一个 TAR 并命名为me.txt.tar.

一分钟后,我再次创建了一个名称和文本完全相同的文件(基本上我就是这样做的touch me.txt),然后将其制成名为 .tar 的 TAR 文件me2.txt.tar

从技术上讲,两个 tars 都具有相同的文件和相同的文件内容,但文件的创建时间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)

相关内容