/data01/primary
文件夹中有100个文件,/data02/secondary
中的machineX
文件夹中有100个不同的文件。所有这200个文件都来自machineA
和machineB
,如果machineA
中没有文件,那么它应该位于machineB
中。
因此,我们将文件从machineA
和machineB
(源服务器)复制到machineX
(目标服务器)。我们从machineA和machineB复制的文件位于此目录/checkbat/data/snapshot/20140918
中,因此我们在两个源服务器中都有此目录。
现在我试图通过将它与machineA和machineB进行比较,对machineX中的200个文件进行md5校验和。
文件路径是这样的,因为除了1,2,3,4个数字之外,你可以看到一切都是一样的。
t1_monthly_1980_1_200003_5.data
t1_monthly_1980_2_200003_5.data
t1_monthly_1980_3_200003_5.data
t1_monthly_1980_4_200003_5.data
因此,/ data01 / primary文件夹中将有100个文件,而machineX中的/ data02 / secondary文件夹中有100个不同的文件来自machineA和machineB。
现在我需要做的是,将/data01/primary
文件夹中100个文件的md5checksum与machineA
和machineB
中的文件进行比较。如果源服务器中的任何文件校验和与目标服务器不同,则在源服务器和目标服务器上打印文件名及其校验和。
#!/bin/bash
export PRIMARY=/data01/primary
export SECONDARY=/data02/secondary
readonly DESTINATION_SERVER=(machineA machineB)
export DESTINATION_SERVER_1=${DESTINATION_SERVER[0]}
export DESTINATION_SERVER_2=${DESTINATION_SERVER[1]}
export FILES_LOCATION_ON_DESTINATION=/checkbat/data/snapshot/20140918
readonly SOURCE_SERVER=machineX
export dir3=$FILES_LOCATION_ON_DESTINATION
# compare the checksum and find the files whose checksum are different
for entry in "$PRIMARY"/*
do
echo "$entry"
# now how to compare the file checksum of this file with same file in machineA or machineB
done
我知道如何在单个文件上执行md5checksum但不确定如何比较网络上的文件校验和?这可能吗?
md5sum filename
我已经设置了我的ssh所有内容,我可以在{@ 1}}用户的源服务器上对这些目标服务器执行ssh。
abc
答案 0 :(得分:1)
我会使用ssh来执行此任务。
$ ssh user@hostname "/usr/bin/md5sum filename"
a40bd6fe1ae2c03addba2473e0bdc63b filename
如果您想自动执行任务,请将其分配给这样的变量。
remote_md5sum=`ssh user@hostname "/usr/bin/md5sum filename"`
然后你可以使用$ remote_md5sum中的值来验证它的工作原理。
顺便说一句,我在这种情况下使用私钥认证,因此我不需要密码。 #!/斌/庆典
export PRIMARY=/data01/primary
export SECONDARY=/data02/secondary
readonly DESTINATION_SERVERS=(machineA machineB)
export DESTINATION_SERVER_1=${DESTINATION_SERVERS[0]}
export DESTINATION_SERVER_2=${DESTINATION_SERVERS[1]}
export FILES_LOCATION_ON_DESTINATION=/checkbat/data/snapshot/20140918
readonly SOURCE_SERVER=machineX
export dir3=$FILES_LOCATION_ON_DESTINATION
# compare the checksum and find the files whose checksum are different
for entry in "$PRIMARY"/*
do
local_md5sum=`/usr/bin/md5sum "$entry" | awk '{print $1}'`
for DESTINATION_SERVER in $DESTINATION_SERVERS
do
remote_md5sum=`ssh user@$DESTINATION_SERVER /usr/bin/md5sum "$entry" | awk '{print $1}'`
# now how to compare the file checksum of this file with same file in machineA or machineB
if [ "$local_md5sum" -eq "$remote_md5sum" ]
then
echo "match";
else
echo "not match"
fi
done
done