我有几个不同的Linux服务器,所有这些服务器基本上是彼此的镜像。但是,其中一些已经不同步(机器1中的文件A与机器2中的文件B不同)。
我正在设计一个脚本(仅shell
或Perl
),它将系统地遍历某些目录,并将不同机器中的相应文件相互分开,并生成一个有意义的报告稍后,我将尝试同步文件。
到目前为止,我的想法是如何解决这个问题:
/tmp
和本地差异ssh
和diff
rsync
我的问题是:系统地比较不同机器中的两个文件(但类似的目录结构)的最佳方法是什么,是否有任何可能有用的内置Perl实用程序?
答案 0 :(得分:2)
rsync将通过仅发送差异来找出差异并同步文件。一旦两个文件夹同步,它将非常快。 (但第一次同步需要一些时间)
答案 1 :(得分:1)
你也可以在这里使用git。一种可能的工作流程:只需签入要比较的所有文件(或使用git add -A
完成目录)。然后在本地工作站上创建一个空的git存储库,用于获取所有其他存储库,并用于进行比较:
git init
git remote add firstmachine ssh://user@firstmachine/path/to/directory
git remote add othermachine ssh://user@othermachine/path/to/directory
git fetch --all
现在可以比较两台机器的内容:
git diff remotes/firstmachine/master remotes/othermachine/master
或者只是比较特定文件的内容:
git diff remotes/firstmachine/master remotes/othermachine/master -- file/to/compare
使用第三台机器进行比较并不是绝对必要的。您还可以将其他机器中的内容git-fetch到firstmachine。
答案 2 :(得分:0)
我曾经使用过类似工具(位于python
)。它的作用是,在夜间的给定时间运行cron
作业,这会将tar
bzipped
个文件带到一个服务器,提取目录并运行递归{{ 1}}就可以了。然后,diff
输出了一些diff
脚本,这些脚本会分析python
帅哥(diff
行/ +
行等)以了解变化
不确定!
或Perl
中是否预先构建了模块,但其中一个可能确实有一些帮助程序。
答案 3 :(得分:0)
如果您需要了解某些本地和远程文件系统之间的区别,以下方法可以最大限度地减少网络负载:
制作要比较的本地目录($ D)的本地副本($ C)。即:
cp -R $D $C
使用rsync复制要在$ C上比较的远程目录($ R):
rsync -av --delete $remote_host:$R $C
将$ D与$ C进行比较:
diff -u $D $C