比较目录结构的最佳方法是什么?
我有一个使用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
当然,该工具可以是现成的,也可以是 python 脚本的想法。
非常感谢!
乌迪
您正在寻找的工具是rdiff。它的工作方式类似于结合 rsync 和 diff。它会创建一个补丁文件,您可以比较或分发该补丁文件。
有些人出于不同的原因想要比较文件系统,所以我将在这里写下我想要什么以及我是如何做到的。
我想了:
我做了什么:
第一个快照(
before.sh
脚本):第二个快照(
after.sh
脚本):比较它们(
diff.sh
脚本):好的部分是这使用了几乎默认的系统二进制文件。可以通过传递
find
一个-exec
回显文件路径的参数和之后的 MD5 来根据内容进行比较。如果您不想安装其他工具...
是的,它可以使用 find 和 exec 或 find 和 xargs 来完成,就像在 for 循环中找到一样容易。而且,您还可以完善 diff 的输出,使其显示“此文件在 host1 上但不在 host2 上”之类的内容,但此时您最好安装其他人都在谈论的工具......
我过去使用dirdiff来比较目录结构。它仅适用于本地目录,因此您必须
sshfs
-mount 您的其他目录。好消息是您可以直观地看到文件是否相等以及哪个文件更新或旧。它最多支持5个目录。您还可以查看差异并将文件从一个复制到另一个。
diff -r
实际上效果很好。如果您只想知道文件是否不同,而不是差异的实际内容,请执行diff -qr
从 rsync 手册页:
可能这会有所帮助。
我会为此使用 Meld。
我真的不想安装任何新东西,所以我的解决方案有点粗糙,但快速有效。
我想比较所有文件已被复制,并且它们的文件模式、所有权和 SELinux 安全上下文保持不变。
所以我跑了:
然后像这样比较:
如果两个文件的内容保持折叠状态,则它们是相同的。如果没有,则显示差异。
更新参数
ls
以反映您需要检查的属性。YMMV除了 Windows 上已经提到的工具之外,您还可以使用 Total Commander 或 WinSCP,它们都具有非常舒适的功能来比较(和同步)目录。