一妆丘、以下是一個(gè)示例:
#!/bin/bash
#假如要備份的是諸多文件夾的其中某些姊扔,例如:2023-03-08_12,2023-03-09_12奶浦,2023-03-10_12....
#然后備份其中一個(gè)2023-03-08_12
#這里展示的是備份前一天產(chǎn)生的數(shù)據(jù)
#備份開始時(shí)間
starttime="`date +%Y%m%d%H%M`"
#即將備份源文件的時(shí)間前綴, 如:2023-03-08_12
sourcefilepertime=""
#壓縮后備份文件的前綴,如:20230308
backpretime=""
#獲取前天時(shí)間
function getyesterday(){
sourcefilepertime=`date -d -2day +%Y-%m-%d_12`
backpretime=`date -d -2day +%Y%m%d`
}
getyesterday
echo "備份數(shù)據(jù)的所屬日期為: ${backpretime}"
echo "即將要備份的文件是: ${sourcefilepertime}:00:00"
#源文件夾路徑捎迫、 日志文件路徑晃酒、 臨時(shí)文件夾路徑
filepath=XXXXXXXX
logfilepath=XXXXXXXX/test.log
tempfiledir=XXXXXXXX
#開始操作
cd ${filepath}
echo `ls | grep "^${sourcefilepertime}"`
#把要備份的數(shù)據(jù)拷貝到tempfiledir臨時(shí)文件夾中
for f in `ls | grep "^${sourcefilepertime}"`; do
cp -r ${f} ${tempfiledir}
done
#文件拷貝到臨時(shí)文件夾之后,然后壓縮該臨時(shí)文件夾
cd XXXXXXXX
echo "開始?jí)嚎s......"
tar -zcf ${backpretime}test.tar.gz backupfiletemp
echo "壓縮完成......"
backupfilename="${backpretime}test.tar.gz"
echo "*************** 備份時(shí)間: ${starttime} ***************" >> ${logfilepath}
sleep 3s
#目標(biāo)服務(wù)器所用賬號(hào)的密碼
password='XXXXXXX'
echo "開始備份 ..."
echo "開始備份 ..." >> ${logfilepath}
/usr/bin/expect <<EOF
#設(shè)置超時(shí)時(shí)間
set timeout -1
spawn rsync -av 備份文件路徑 目標(biāo)服務(wù)器用戶@目標(biāo)服務(wù)器ip::備份文件存放路徑
expect "*assword:"
send "${password}\r"
#send "exit\r"
expect eof
EOF
if [ $? = 0 ]; then
echo "${starttime} :備份成功! "
echo "${starttime} :備份成功! " >> ${logfilepath}
else
echo "${starttime} :備份失敗! "
echo "${starttime} :備份失敗! " >> ${logfilepath}
fi
#將本地產(chǎn)生的臨時(shí)文件夾里面的內(nèi)容和壓縮包等刪除
cd XXXXXXXX
rm ./${backupfilename}
rm -r XXXXXXXXXXXX
echo -e "\n\n" >> ${logfilepath}
二窄绒、如果需要定時(shí)備份贝次,可以啟用crontab
xxx@xxx-virtual-machine:~$ crontab -l
xxx@xxx-virtual-machine:~$ crontab -e
crontab: installing new crontab
#在 crontab -e 編輯模式下添加,然后保存即可
#例如:每天早上5點(diǎn)運(yùn)行 xx/backup.sh
0 5 * * * /usr/bin/bash xx/backup.sh
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者