如何比较源服务器中的文件的md5checksum与shell脚本中的目标服务器?

时间:2014-09-22 19:11:20

标签: linux bash shell unix md5sum

/data01/primary文件夹中有100个文件,/data02/secondary中的machineX文件夹中有100个不同的文件。所有这200个文件都来自machineAmachineB,如果machineA中没有文件,那么它应该位于machineB中。

因此,我们将文件从machineAmachineB(源服务器)复制到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与machineAmachineB中的文件进行比较。如果源服务器中的任何文件校验和与目标服务器不同,则在源服务器和目标服务器上打印文件名及其校验和。

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

1 个答案:

答案 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