如何辨别两台服务器上哪些文件不同

如何辨别两台服务器上哪些文件不同

这里我们可以看到这两个目录的 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 会报告任何不同的文件

相关内容