创建一个比较多个服务器中多个文件的脚本

时间:2013-07-09 01:02:48

标签: perl shell ssh diff sftp

我有几个不同的Linux服务器,所有这些服务器基本上是彼此的镜像。但是,其中一些已经不同步(机器1中的文件A与机器2中的文件B不同)。

我正在设计一个脚本(仅shellPerl),它将系统地遍历某些目录,并将不同机器中的相应文件相互分开,并生成一个有意义的报告稍后,我将尝试同步文件。

到目前为止,我的想法是如何解决这个问题:

  1. sftp文件到/tmp和本地差异
  2. 使用sshdiff
  3. 使用rsync
  4. 我的问题是:系统地比较不同机器中的两个文件(但类似的目录结构)的最佳方法是什么,是否有任何可能有用的内置Perl实用程序?

4 个答案:

答案 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)

如果您需要了解某些本地和远程文件系统之间的区别,以下方法可以最大限度地减少网络负载:

  1. 制作要比较的本地目录($ D)的本地副本($ C)。即:

    cp -R $D $C
    
  2. 使用rsync复制要在$ C上比较的远程目录($ R):

    rsync -av --delete $remote_host:$R $C
    
  3. 将$ D与$ C进行比较:

    diff -u $D $C