比较(差异)完整目录结构的最佳方法?

Ada*_*tan 31 files filesystems rsync

比较目录结构的最佳方法是什么?

我有一个使用rsync的备份实用程序。我想说明源和备份之间的确切差异(在文件大小和上次更改日期方面)。

就像是:

Local file                   Remote file                         Compare
/home/udi/1.txt (date)(size)   /home/udi/1.txt (date)(size)     EQUAL
/home/udi/2.txt (date)(size)   /home/udi/2.txt (date)(size)     DIFFERENT
Run Code Online (Sandbox Code Playgroud)

当然,该工具可以是现成的,也可以是python脚本的想法。

非常感谢!

乌迪

bri*_*gge 19

您正在寻找的工具是rdiff。它的工作原理类似于结合 rsync 和 diff。它会创建一个补丁文件,您可以比较或分发该文件。


Cam*_*tin 13

有些人出于不同的原因想要比较文件系统,所以我会在这里写下我想要什么以及我是如何做到的。

我想了:

  • 相同的文件系统与自身进行比较,即快照进行更改快照比较
  • 添加或删除了哪些文件的列表,不关心内部文件更改。

我做了什么:

第一个快照(before.sh脚本):

find / -xdev | sort > fs-before.txt
Run Code Online (Sandbox Code Playgroud)

第二个快照(after.sh脚本):

find / -xdev | sort > fs-after.txt
Run Code Online (Sandbox Code Playgroud)

比较它们(diff.sh脚本):

diff -daU 0 fs-before.txt fs-after.txt | grep -vE '^(@@|\+\+\+|---)'
Run Code Online (Sandbox Code Playgroud)

好的部分是它使用了几乎默认的系统二进制文件。可以通过传递find一个-exec回显文件路径的参数和之后的 MD5来根据内容进行比较。


chr*_*ris 9

如果您不想安装其他工具...

for host in host1 host2
do
  ssh $host ' 
  cd /dir &&
  find . |
  while
    read line
  do
    ls -l "$line"
  done ' | sort  > /tmp/temp.$host.$$
done
diff /tmp/temp.*.$$ | less
echo "don't forget to clean up the temp files!"
Run Code Online (Sandbox Code Playgroud)

是的,它可以用 find 和 exec 或 find 和 xargs 完成,就像在 for 循环中 find 一样容易。而且,您还可以优化 diff 的输出,因此它会显示诸如“此文件在 host1 上但不在 host2 上”之类的内容,但此时您最好安装其他人都在谈论的工具...


chm*_*eee 5

我过去曾使用dirdiff来比较目录结构。它仅适用于本地目录,因此您必须sshfs-mount 其他目录。

好处是您可以直观地看到文件是否相等以及哪个是新的或旧的。它最多支持 5 个目录。您还可以查看差异并将文件从一个复制到另一个。


小智 5

diff -r实际上效果很好。如果您只想知道文件是否不同,而不是差异的实际内容,那么请执行以下操作diff -qr