2017-09-05 145 views
0

有沒有辦法區分多個目錄而不是兩個目錄的內容?或者在多個主機上區分單個目錄。 我寫了下面的bash腳本差異比較到三臺主機上比較遠程主機上的多個目錄

#!/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 

有沒有更好的方式來做到這一點的目錄?

+0

差異本身一次只能在兩個版本上工作。 https://stackoverflow.com/questions/572237/whats-the-best-three-way-merge-tool –

+0

謝謝。我只是想知道是否有更好的方法來使用命令比較多個目錄。 – pdna

+0

取決於你想找什麼。如果'差異'工作,那麼我不會再搜索。祝您好運。 – shellter

回答

2

是,GNU diff有一個選項--from-file,允許一個參考文件或目錄的其他許多人的比較。

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

注意,它只會比較ref-dirdir1,...,dirN;它不會比較dir1dir2,...,dirN

至於你的遠程目錄,因爲你有ssh的機器訪問權限,你可以用sshfs本地掛載它們,以便在它們上執行diff

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