0

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

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

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

  1. sftp 文件/tmp和本地差异
  2. 使用sshdiff
  3. 使用rsync

我的问题是:系统地比较不同机器(但目录结构相似)中的两个文件的最佳方法是什么,是否有任何内置的 Perl 实用程序可能有用?

4

4 回答 4

2

rsync 将找出差异并通过仅发送差异来同步您的文件。一旦两个文件夹同步,它将非常快。(但第一次同步需要一些时间)

于 2013-07-09T01:08:41.070 回答
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

使用第三台机器进行比较并不是绝对必要的。您还可以将内容从 othermachine git-fetch 到 firstmachine。

于 2013-07-09T05:35:01.250 回答
0

我曾研究过一个类似的工具(在 中python)。它所做的是,cron在晚上的给定时间运行一项工作,这会将tar bzipped文件带到一个服务器,提取目录并在其上运行递归diff。然后diff通过一些python脚本运行输出,这些脚本将分析diff大块(+行/!行等)以了解更改量。

不确定 or 中是否有预构建的模块PerlPython但其中一个可能肯定有一些帮助工具。

于 2013-07-09T06:43:43.477 回答
0

如果你需要知道一些本地和远程文件系统的区别,下面的方法可以最小化网络负载:

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

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

    rsync -av --delete $remote_host:$R $C
    
  3. 比较 $D 和 $C:

    diff -u $D $C
    
于 2013-07-09T07:36:11.187 回答