2017-09-05 1 views
0

2つのディレクトリの代わりに複数のディレクトリの内容を比較する方法はありますか?または、複数のホスト上の1つのディレクトリをdiffします。 私はこれを行うには良い方法があります3つのホストリモートホスト上の複数のディレクトリを比較する

#!/bin/bash 

if [[ -n "$(diff <(ssh [email protected] ls -r /user/test1) <(ssh [email protected] ls -r /user/test1))" || -n "$(diff <(ssh [email protected] ls -r /user/test1) <(ssh [email protected] ls -r /user/test1))" ]]; then 
    echo "There are differences" 
fi 

上のディレクトリをdiffをするために、次のbashスクリプトを書きましたか?

+0

diff自体は一度に2つしか動作しません。 https://stackoverflow.com/questions/572237/whats-the-best-three-way-merge-tool –

+0

ありがとうございます。コマンドを使用して複数のディレクトリを比較するより良い方法があるかどうかは疑問です。 – pdna

+0

は、探したいものによって異なります。もし 'diff'が動作していれば、私はさらに検索しません。幸いです。 – shellter

答えて

2

はい、GNU diffは、他の多くの一つの基準ファイルやディレクトリの比較を可能にするオプション--from-fileを持っています。それだけでref-dirdir1と比較すること

diff -r --from-file=ref-dir dir1 dir2 ... dirN 

ノート、...、dirNdir1dir2、...、dirNを比較しません。

リモートディレクトリについては、マシンにsshアクセスできるので、diffを実行するために、ローカルでsshfsをマウントすることができます。

2

各ホストのファイルリストにMD5チェックサムを使用できます。異なる数のサーバーに対して同じスクリプトを使用することができます。リストが同じ場合は、チェックサムに同じ値を受け取る必要があります。そして、すべての合計を前のものと比較するだけです。それが他のチェックサムと異なる場合は、違いがあります。

#!/bin/bash 

MD5SUMS=$(
for hostname in host{1,2,3} 
do 
    result=$(ssh [email protected]${hostname} ls -r /user/test1 | md5sum) 
    result=${result%% *} 
done 
) 

PREVSUM="" 
for SUM in ${MD5SUMS} 
do 
    if [ -z "$PREVSUM" ] 
    then 
     PREVSUM=$SUM 
     continue 
    else 
     if [ "$PREVSUM" != "$SUM" ] 
     then 
      echo "There are differences" 
     fi 
     PREVSUM=$SUM 
    fi 
done 
関連する問題