2013-07-09 41 views
0

我有幾個不同的Linux服務器,所有這些服務器本質上都是彼此的鏡像。但是,其中一些已經不同步(機器1中的文件A不同於機器2中的文件B)。創建一個比較多個服務器中的多個文件的腳本

我正在設計一個腳本(僅適用於shellPerl),它將系統地遍歷某些目錄並將不同機器中的相應文件相互區分開來,並生成有意義的報告。稍後,我會嘗試同步這些文件。

這是我的想法,到目前爲止關於如何將此方法:使用rsync

我的問題是

  1. SFTP文件使用sshdiff
  2. /tmp和DIFF本地
  3. :系統地比較不同機器中兩個文件(但類似的目錄結構)的最佳方法是什麼? d是否有任何內置的Perl實用程序可能會有所幫助?

回答

2

rsync會找出差異,並通過僅發送差異來同步您的文件。一旦兩個文件夾同步,它會非常快。 (但第一次同步需要一些時間)

1

你也可以在這裏使用git。一種可能的工作流程:只需選中要比較的所有文件(或使用git add -A即可完成目錄)。然後創建這是用來獲取所有其他存儲庫本地工作站上的空git倉庫,並且它是用來做比較:

git init 
git remote add firstmachine ssh://[email protected]/path/to/directory 
git remote add othermachine ssh://[email protected]/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 

這不是必要使用第三臺計算機的比較。您也可以將來自其他機器的內容從第一臺機器中獲取。

0

我曾在一個類似的工具(這是在python)。它所做的是,在一個特定的夜晚時間運行一個cron作業,這將使tarbzipped文件到一臺服務器,提取目錄並在其上運行一個遞歸的diffdiff輸出然後運行通過一些python腳本,這將分析diff大塊(+行/ !行等)知道變化的數量。

不確定在PerlPython中是否有預構建的模塊,但是其中一個輔助器utils可能確實可用。

0

如果您需要了解一些本地和遠程文件系統之間的差別,下面的方法最大限度地減少網絡負載:

  1. 使本地目錄($ d)的本地副本($ C)你想比較。即:

    cp -R $D $C 
    
  2. 使用rsync複製的遠程目錄($ R)要比較在$ C:

    rsync -av --delete $remote_host:$R $C 
    
  3. $ d比較$ C:

    diff -u $D $C 
    
相關問題