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

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

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

我有一个备份实用程序,它使用同步。我想要说出源文件和备份文件之间的确切差异(就文件大小和上次更改日期而言)。

就像是:

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

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

非常感谢!

乌迪

答案1

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

答案2

有些人出于不同的原因想要比较文件系统,因此我将在这里写下我想要的内容以及我如何进行比较。

我想了:

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

我做了什么:

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

find / -xdev | sort > fs-before.txt

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

find / -xdev | sort > fs-after.txt

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

diff -daU 0 fs-before.txt fs-after.txt | grep -vE '^(@@|\+\+\+|---)'

好处是,它使用几乎默认的系统二进制文件。通过传递一个回显文件路径的参数以及随后的 MD5 值,可以基于内容进行find比较-exec

答案3

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

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!"

是的,可以使用 find 和 exec 或 find 和 xargs 来完成,就像在 for 循环中 find 一样容易。此外,您还可以美化 diff 的输出,使其显示“此文件在 host1 上,但不在 host2 上”之类的内容,但此时您可能还不如安装其他人正在谈论的工具……

答案4

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

相关内容