##最近以为面试原因对以前的脚本进行整理下,此脚本根据两个目录下文件的MD5进行校对备份,

#将需要备份目录(data_path)下文件名与备份目录(back_data_path)下的文件名进行比对,如果同名文件存在,开始校验MD5,如果md5相同,则说明文件内容相同,不操作,如果文件名存在,但是md5不同,说明文件内容不同,则将次文件备份到备份目录(back_data_path),如果文件名不存在则说明是新文件,则直接备份。

##此脚本只是简单地实现了功能具体需求可以自己修改。

 

#!/bin/bash
#Backup files based on MD5 files
#Date:2017-8-5
#Author:gary


#定义操作的目录
data_p=/home/zyb/data_p/
bak_p=/home/zyb/bak_p/

#定义时间戳
bak_time=`date '+%Y-%m-%d-%H:%M:%S'`

 

#将备份目录文件名赋值,以便后面与数据目录文件进行比对
data_path=$(ls $bak_p)


#将数据目录文件名赋值,逐一与前面赋值的备份目录进行比对
for i in $(ls $data_p)
do
#如果逐一比对的文件在备份目录下,判断MD5
if [[ $data_path=~$i ]];then

#获取比对文件的MD5
md_data_file=`md5sum $data_p$i|awk -F' ' '{print $1}'`
md_bak_file=`md5sum $bak_p$i|awk -F' ' '{print $1}'`

#根据MD5是否相同判断同名文件的内容,相同输出信息,MD5不同备份打上备份时间戳
if [ "$md_data_file" != "$md_bak_file" ];then
cp $data_p$i $bak_p$i$bak_time
if [ $? == 0 ];then
echo "$i is success bakup!"
fi
elif [ "$md_data_file" = "$md_bak_file" ];then
echo "$i is new in $bak_p"
fi
#如果逐一比对的文件不在备份目录下,直接备份
elif [[ $data_path=~$i ]];then
cp $data_p$i $bak_p
fi
done

 

posted on 2018-08-23 07:03  Garyz  阅读(1258)  评论(1编辑  收藏  举报