##最近以為面試原因對以前的腳本進行整理下,此腳本根據兩個目錄下文件的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