比较远程主机上的多个目录

时间:2017-09-05 19:51:49

标签: bash rsync

有没有办法在多个目录的内容而不是两个目录上进行区分?或者在多个主机上区分单个目录。 我编写了以下bash脚本来在三台主机上区分目录

#!/bin/bash

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

有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

是的,GNU diff有一个选项--from-file,允许将一个参考文件或目录与其他参考文件或目录进行比较。

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

请注意,它只会将ref-dirdir1,...,dirN进行比较;它不会将dir1dir2,...,dirN进行比较。

对于您的远程目录,由于您具有对计算机的ssh访问权限,因此可以使用sshfs在本地安装它们,以便对它们执行diff

答案 1 :(得分:2)

您可以将MD5校验和用于每个主机的文件列表。它允许您对不同数量的服务器使用相同的脚本。如果列表相同,则应该为校验和接收相同的值。然后你只需将所有总和与前一个总和进行比较。如果它与任何其他校验和不同,那么你就有差异。

#!/bin/bash

MD5SUMS=$(
for hostname in host{1,2,3}
do
    result=$(ssh user@${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