有没有办法在多个目录的内容而不是两个目录上进行区分?或者在多个主机上区分单个目录。 我编写了以下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
有更好的方法吗?
答案 0 :(得分:3)
是的,GNU diff
有一个选项--from-file
,允许将一个参考文件或目录与其他参考文件或目录进行比较。
diff -r --from-file=ref-dir dir1 dir2 ... dirN
请注意,它只会将ref-dir
与dir1
,...,dirN
进行比较;它不会将dir1
与dir2
,...,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