shell--根據MD5校驗備份某文件夾下的文件


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM