linux – 比较两个服务器之间的文件校验和并报告不匹配

我必须将machineA中/ primary和/ secondary文件夹中所有文件的校验和与远程服务器machineB中此文件夹/ bat / snap /中的文件进行比较.远程服务器将包含大量文件以及machineA中的文件.

>如果校验和中存在任何不匹配,那么我想报告所有那些在机器A中存在问题且具有完整路径的文件,并以非零状态代码退出.
>如果一切都匹配,则退出零.

我写了一个命令(不确定是否有更好的方法来编写它),我在machineA上运行但速度非常慢.有没有办法让它更快?

(cd /primary && find . -type f -exec md5sum {} +; cd /secondary && find . -type f -exec md5sum {} +) | ssh machineB '(cd /bat/snap/ && md5sum -c)'

它也打印出这样的文件名./abc_monthly_1536_proc_7.data:好的.有没有办法在machineA上打印出该文件的完整路径名?

ssh到远程主机的每个文件肯定不是很有效.并行可以通过同时执行更多文件来加快速度,但更有效的方法可能会稍微调整一下命令,以便ssh到machineB并一次性获取所有md5sum.这可能吗?

最佳答案
如果您的主要目标不是计算校验和但是列出差异,则可能更快(更简单)的方法是使用–dry-run选项运行rsync.如果列出任何文件,它们会有所不同,例如:

MBP:~ jhartman$rsync -avr --dry-run rsync-test 192.168.1.100:/tmp/; echo $?
building file list ... done
rsync-test/file1.txt

sent 172 bytes  received 26 bytes  396.00 bytes/sec
total size is 90  speedup is 0.45

当然,由于–dry-run没有在目标上更改文件.

我希望它会有所帮助,
亚雷克

转载注明原文:linux – 比较两个服务器之间的文件校验和并报告不匹配 - 代码日志