ITPub博客

首页 > Linux操作系统 > Linux操作系统 > shell差异拷贝(带md5检验)

shell差异拷贝(带md5检验)

原创 Linux操作系统 作者:perfychi 时间:2012-09-17 14:41:24 0 删除 编辑

---------------------------要求如下:----------------------

192.168.123.154上/oradata2/cm下的所有新的文件(包括新创建的文件夹),实现以下要求

1.文件全部拷贝到192.168.123.155下的/chi/cm

2.已经拷贝成功的文件不需要再次拷贝


实现如下:

-------------------------------output.sh---------------------
#!/bin/bash
#FILE_NAME: output.sh
#Author: chipengfei
#Date: 2012-09-17
#Usage : output.sh
#Desc: traverse  the  

if [ $# -lt 1 ]; then
echo 'too few arguments'
exit
fi

function list_all()
{
cd $1

list=`ls`
for i in $list ;do
cur_path=`pwd`
echo $cur_path/$i
if [ -d $i ] ; then
list_all $i
fi
done

cd ..
}


list_all $1



----------------------------------diff_copy.sh------------------------------
#!/bin/bash

#FILE_NAME:diff_copy.sh
#Author: chipengfei
#Version: 1.0.0
#DATE: 2012-09
#DESC: Copy local files which not  exists in  a remote host  to the remote machine.
#Usage: If need ,please modify the following variables: src_dir/src_dir2 , dest_dir/dest2, dest_host.


# initally clear used tempfile
rm -rf /tmp/node1.list /tmp/node2.list /tmp/diff.list 

# the defined variables by user
src_dir=/oradata2/cm
dest_dir=/chi/cm
src_dir2='oradata2\/cm'
dest_dir2='chi\/cm'
dest_host=dbs  # remote IP or hostname
src_host=`hostname` # local IP or hostname

echo "Please wait a moment, checking the file hierarchy and md5 values of machines : [${src_host}] and [${dest_host}] ..."

/home/oracle/output.sh   $src_dir > /tmp/node1.list
ssh $dest_host /home/oracle/output.sh  $dest_dir > /tmp/node2.list
list1=$(cat /tmp/node1.list | sed "s/${src_dir2}/${dest_dir2}/g")
list2=`cat /tmp/node2.list`
for i in $list1 ; do
  flag=0
for j in  $list2 ; do
if [ $i == $j ] ; then
k=`echo $i | sed "s/${dest_dir2}/${src_dir2}/g"`
if [ -f $k ] ; then 
md5_src=`md5sum $k | awk '{print $1}'`
md5_dest=`ssh ${dest_host} md5sum $j | awk '{print $1}'`
if [ $md5_src != $md5_dest ] ; then
flag=0
break
fi
fi
flag=1
break
fi
done
  if [ "$flag" -eq 0 ];  then
echo $i >> /tmp/diff.list
fi
done
if [ ! -f /tmp/diff.list ] ; then
echo -e '\n###########################################################################################################'
echo  "   Congratulations: the file hierarchy and md5 values of machines : [${src_host}] and [${dest_host}] are consistent!"
echo    '############################################################################################################'
exit
fi

for i in `cat  /tmp/diff.list` ; do
  k=$(echo $i |  sed 's/\//\\\//g')
  sed -i "/${k}\/./d"  /tmp/diff.list
done
diffs=`cat /tmp/diff.list`
for  i in  $diffs ; do
j=`echo $i | sed "s/${dest_dir2}/${src_dir2}/g"`
echo "scp -r $j  ${dest_host}:$i"
scp -r $j  ${dest_host}:$i
done

# finally clear used tempfile 
rm -rf /tmp/node1.list /tmp/node2.list /tmp/diff.list

#----End------#

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/27042095/viewspace-743785/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-06-06

  • 博文量
    484
  • 访问量
    2976218