这里我们可以看到这两个目录的 md5sum 是不同的,如何判断文件夹结构或某些文件是造成这种差异的原因?
[skynet]~> ssh evn-web04'find /www/web/prod/evn.tumo.lab -type f -exec md5sum {} \; |sort -k 34 | md5sum' Ubuntu 14.04.4 LTS evn-web04.tumo.lab ssh-pty f247a2e41cf54f14cefe83b8872ae862 - [skynet]~> ssh evn-web03'find /www/web/prod/evn.tumo.lab -type f -exec md5sum {} \; |sort -k 34 | md5sum' Ubuntu 14.04.4 LTS evn-web03.tumo.lab ssh-pty 53413a49fb754210666f4292e8b9ee14 -
答案1
在一台服务器上生成文件列表,然后在另一台服务器上检查。以相反的顺序重复此操作,并整理列表。
首先,收集 evn-web04 上的文件列表及其对应的哈希值:
ssh evn-web04 'find /www/web/prod/evn.tumo.lab -type f -exec md5sum {} \;'
其次,将其传递给 evn-web03 上的相同哈希实用程序,传递--check
并过滤任何不相同的内容:
ssh evn-web04 'find /www/web/prod/evn.tumo.lab -type f -exec md5sum {} \;' | \
ssh evn-web03 "md5sum --check - | grep -vE ': OK$'"
这将为您提供以下文件列表:
- 存在于 evn-web04 上,但不存在于 evn-web03 上,或者
- evn-web04 上存在,且 evn-web04 和 evn-web03 之间存在差异
要获得完整的差异列表,您还需要反转服务器顺序(因为 evn-web03 上可能存在 evn-web04 上不存在的文件,上面的命令无法按原样捕获)。只需再次运行相同的命令,但将服务器名称交换位置即可。
答案2
以下一行代码即可:
diff <(find /path/to/dir -type f -exec su -c 'echo -n {}; md5sum {}' \;) \\
<(ssh me@remote find /path/to/dir -type f -exec su -c 'echo -n {}; md5sum {}' \;)
人们常常低估了由于进程替代,这类任务可以通过单个命令执行。
答案3
我的第一个想法是使用
rsync ... --dry-run path user@remote:/path
来自手册页
-n, --dry-run perform a trial run with no changes made
Rsync 会报告任何不同的文件