Perl 创建比较多个服务器中多个文件的脚本
我有几个不同的linux服务器,它们本质上都是彼此的镜像。但是,其中一些已不同步(机器1中的文件A与机器2中的文件B不同) 我正在设计一个脚本(Perl 创建比较多个服务器中多个文件的脚本,perl,shell,ssh,diff,sftp,Perl,Shell,Ssh,Diff,Sftp,我有几个不同的linux服务器,它们本质上都是彼此的镜像。但是,其中一些已不同步(机器1中的文件A与机器2中的文件B不同) 我正在设计一个脚本(shell或Perl),它将系统地遍历某些目录,将不同机器中的相应文件相互区分,并生成一个有意义的报告。稍后,我将尝试同步这些文件 以下是我到目前为止对如何实现这一目标的看法: sftp文件到/tmp和本地差异 使用ssh和diff 使用rsync 我的问题是:系统地比较不同机器(但目录结构相似)中的两个文件的最佳方法是什么?是否有任何内置的Perl实用
shell
或Perl
),它将系统地遍历某些目录,将不同机器中的相应文件相互区分,并生成一个有意义的报告。稍后,我将尝试同步这些文件
以下是我到目前为止对如何实现这一目标的看法:
/tmp
和本地差异ssh
和diff
rsync
我的问题是:系统地比较不同机器(但目录结构相似)中的两个文件的最佳方法是什么?是否有任何内置的Perl实用程序可能会有所帮助?rsync将找出差异,并只发送差异来同步文件。一旦两个文件夹同步,它将非常快。(但是第一次同步需要一些时间)rsync将找出差异,并通过只发送差异来同步文件。一旦两个文件夹同步,它将非常快。(但是第一次同步需要一些时间)您也可以在这里使用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将内容从othermachine提取到firstmachine。您也可以在此处使用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获取到firstmachine。我曾经使用过类似的工具(在python中)。它所做的是,在晚上的某个特定时间运行
cron
作业,将tar
bzipped
文件带到一台服务器,提取目录并在其上运行递归diff
。然后通过一些python
脚本运行diff
输出,这些脚本将分析diff
大块(+
行/!
行等),以了解更改量
不确定在
Perl
或Python
中是否有预构建的模块,但其中一个中肯定有一些辅助工具util可用。我曾使用过类似的工具(在Python
中)。它所做的是,在晚上的某个特定时间运行cron
作业,将tar
bzipped
文件带到一台服务器,提取目录并在其上运行递归diff
。然后通过一些python
脚本运行diff
输出,这些脚本将分析diff
大块(+
行/!
行等),以了解更改量
不确定在
Perl
或Python
中是否有预构建的模块,但其中一个中肯定有一些辅助工具util可用。如果您需要了解某些本地和远程文件系统之间的差异,以下方法可将网络负载降至最低:
cp -R $D $C
rsync -av --delete $remote_host:$R $C
diff -u $D $C
如果需要了解某些本地文件系统和远程文件系统之间的差异,请使用以下方法最小化网络负载:
cp -R $D $C
rsync -av --delete $remote_host:$R $C
diff -u $D $C