比较远程主机上的多个目录
compare multiple directories on remote hosts
有没有办法区分多个目录而不是两个目录的内容?或者在多个主机上区分单个目录。
我编写了以下 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
有更好的方法吗?
您可以对每个主机的文件列表使用 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
是的,GNU diff
有一个选项 --from-file
允许将一个参考文件或目录与许多其他参考文件或目录进行比较。
diff -r --from-file=ref-dir dir1 dir2 ... dirN
请注意,它只会将 ref-dir
与 dir1
、...、dirN
进行比较;它不会比较 dir1
和 dir2
, ..., dirN
.
至于您的远程目录,因为您可以通过 ssh 访问机器,您可以使用 sshfs
在本地安装它们以便在它们上执行 diff
。
有没有办法区分多个目录而不是两个目录的内容?或者在多个主机上区分单个目录。 我编写了以下 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
有更好的方法吗?
您可以对每个主机的文件列表使用 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
是的,GNU diff
有一个选项 --from-file
允许将一个参考文件或目录与许多其他参考文件或目录进行比较。
diff -r --from-file=ref-dir dir1 dir2 ... dirN
请注意,它只会将 ref-dir
与 dir1
、...、dirN
进行比较;它不会比较 dir1
和 dir2
, ..., dirN
.
至于您的远程目录,因为您可以通过 ssh 访问机器,您可以使用 sshfs
在本地安装它们以便在它们上执行 diff
。