linux文件备份脚本

说明

centos几种文件备份方式: 每天备份, 限制数量备份和文件夹备份脚本, 可自行创建 a.txt~d.txt, dirA~dirD测试

## 命令部分说明
crontab -e #添加定时任务
00 02 * * * sh /路径/脚本.sh #分 时 日 月 星期(0-6 0为星期日) 命令
crontab -l #查看任务列表
tail -f /var/log/cron #查看任务日志
dirname $(readlink -f $0) #当前脚本路径
if [[ ! '/test' =~ ^/.* ]] # =~ 正则判断字符串是否以/开始
tar -zcvf a.tar.gz a.txt &>> a.log # &>> a.log相当于 1>>a.log  2>&1,普通日志和错误日志都写到a.log文件

效果
在这里插入图片描述
在这里插入图片描述


每天备份脚本

backupMaxDay.sh

#!/bin/bash
##
## 限量备份文件
##
## 1.最好加上可执行权限。
## chmod 755 backupMaxDay.sh
## 2.将脚本添加到计划任务中
## crontab -e
## ## 每天2.00点备份一次 
## 分 时 日 月 星期(0-6 0为星期日)
## 00 02 * * * sh /脚本路径/backupMaxDay.sh
## crontab -l #查看任务列表; tail -f /var/log/cron #查看任务日志;
##
################################## 配置 #####################################
## 需要备份的绝对路径目录
SourceDir=/test/backup/backupSource
## 备份文件配置 [ "a.txt b.txt d.txt", `ls $SourceDir` ]
BackupItems="a.txt b.txt d.txt"
## 备份至此目录
DestDir=/test/backup/backupDest
## 备份档案文件保留天数
RetainDay=1
## 执行失败直接退出
set -ue

################################## 初始化 ###################################
CurrFileDir=`dirname $(readlink -f $0)`
if [[ ! -d $CurrFileDir/logs ]]; then mkdir $CurrFileDir/logs; fi
LogFile=$CurrFileDir/logs/${0##*/}.`date +"%Y%m"`.log
if [[ ! $SourceDir =~ ^/.* || ! -d $SourceDir ]]; then echo 需要备份的绝对路径目录不存在 >> $LogFile; exit; fi
if [[ -z $BackupItems ]];then echo 未配置需要备份的文件 >> $LogFile; exit; fi
if [ ! -d $DestDir ]; then mkdir -p $DestDir; fi

################################## 开始备份 #################################
echo "-----------------------------------------------------------------------" >> $LogFile
echo "【每天备份】	`date +'%Y-%m-%d %H:%M:%S.%N'`$SourceDir -> $DestDir】" >> $LogFile
for Item in $BackupItems ;do

ItemFile=$SourceDir/$Item
DestFile=$DestDir/$Item.D`date +'%Y%m%d'`.bkp
if [ ! -f $ItemFile ];then echo "【文件不在】	$Item" >> $LogFile; continue;fi
## 备份
echo "【备份】	$Item -> ${DestFile##*/}" >> $LogFile
cp -pf $ItemFile $DestFile &>> $LogFile
## 删除: 选择一种方式
### 查找文件名日期方式删除:只会删除保留天数临界的那一天文件
OldFile=$DestDir/$Item.D`date --date="$RetainDay days ago" +'%Y%m%d'`.bkp
if [ -f $OldFile ];then
  echo "		@删除 ${OldFile##*/}" >> $LogFile
  rm $OldFile &>> $LogFile; 
fi
### 查找文件属性变动时间方式删除: 会批量删除保留天数前的
#findCmd='find $DestDir -ctime +$[RetainDay-1] -type f -name "$Item.D*.bkp"'
#OldFiles=`eval $findCmd | awk -F'/' '{print $NF}' | sort -n`
#if [[ -n $OldFiles ]];then
#  echo "		@@删除 "$OldFiles >> $LogFile
#  eval "$findCmd -exec rm {} &>> $LogFile \;"
#fi

done
echo "【备份结束】	`date +'%Y-%m-%d %H:%M:%S.%N'`" >> $LogFile
echo "" >> $LogFile


限量备份脚本

backupMaxNum.sh

#!/bin/sh
##
## 限量备份文件
## 
################################ 配置 ####################################
## 需要备份的绝对路径目录
SourceDir=/test/backup/backupSource
## 备份文件配置 [ "a.txt b.txt d.txt", `ls $SourceDir` ]
BackupItems="a.txt b.txt d.txt"
## 备份至此目录
DestDir=/test/backup/backupDest
## 备份档案文件保留数量
RetainNum=1
## 执行失败直接退出
set -ue

################################ 初始化 ###################################
CurrFileDir=`dirname $(readlink -f $0)`
if [[ ! -d $CurrFileDir/logs ]]; then mkdir $CurrFileDir/logs; fi
LogFile=$CurrFileDir/logs/${0##*/}.`date +"%Y%m"`.log

if [[ ! $SourceDir =~ ^/.* || ! -d $SourceDir ]]; then echo 需要备份的绝对路径目录不存在 >> $LogFile; exit; fi
if [[ -z $BackupItems ]];then echo 未配置需要备份的文件 >> $LogFile;exit; fi
if [ ! -d $DestDir ]; then mkdir -p $DestDir; fi

################################ 开始备份 #################################
echo "-----------------------------------------------------------------------" >> $LogFile
echo "【限量备份】	`date +'%Y-%m-%d %H:%M:%S.%N'`$SourceDir -> $DestDir】" >> $LogFile
for Item in $BackupItems ;do

ItemFile=$SourceDir/$Item
DestFile=$DestDir/$Item.N`date +'%Y%m%d_%H%M%S'`.bkp
if [ ! -f $ItemFile ];then echo "【文件不在】	$Item" >> $LogFile; continue;fi
## 备份
echo "【备份】	$Item -> ${DestFile##*/} " >> $LogFile
cp -pf $ItemFile $DestFile &>> $LogFile
## 删除
LsCmd='ls $DestDir | grep "^$Item\.N.*\.bkp$"'
DelCount=$[ `eval $LsCmd | wc -l` - $RetainNum ]
if [ $DelCount -gt 0 ];then
  echo "		@删除$[ $RetainNum+$DelCount ]-$DelCount" `eval $LsCmd | head -n$DelCount` >> $LogFile
  rm `eval $LsCmd | head -n$DelCount | xargs -I$ echo $DestDir/$` &>> $LogFile
fi

done
echo "【备份结束】	`date +'%Y-%m-%d %H:%M:%S.%N'`" >> $LogFile
echo "" >> $LogFile


文件夹备份脚本

backupDirTgz.sh

#!/bin/sh
##
## 备份文件夹
## 
################################ 配置 ####################################
## 需要备份的绝对路径文件夹配置 [ "/test/backup/backupSource/dirA /test/backup/backupSource/dirB /test/backup/backupSource/dirD", `cat BackupDirTgz.items` ]
BackupItems="/test/backup/backupSource/dirA /test/backup/backupSource/dirB /test/backup/backupSource/dirD"
## 备份至此目录
DestDir=/test/backup/backupDest
## 备份档案文件保留数量
RetainNum=1
## 执行失败直接退出
#set -ue

################################ 初始化 ###################################
CurrFileDir=`dirname $(readlink -f $0)`
if [[ ! -d $CurrFileDir/logs ]]; then mkdir $CurrFileDir/logs; fi
LogFile=$CurrFileDir/logs/${0##*/}.`date +"%Y%m"`.log
ErrLogFile=$LogFile.err
if [[ -z $BackupItems ]];then echo 未配置需要备份的文件 >> $ErrLogFile;exit; fi
if [ ! -d $DestDir ]; then mkdir -p $DestDir; fi

################################ 开始备份 #################################
echo "-----------------------------------------------------------------------" >> $LogFile
echo "【文件夹备份】	`date +'%Y-%m-%d %H:%M:%S.%N'` 【-> $DestDir】" >> $LogFile
for Item in $BackupItems ;do

if [[ ! $Item =~ ^/ || ! -d $Item ]];then echo "【文件夹不在】	$Item" >> $ErrLogFile; continue;fi
ItemName=${Item##*/}
DestFile=$DestDir/$ItemName.C`date +'%Y%m%d_%H%M%S'`.bkp.tgz
## 备份
echo -n "【备份】	$Item -> ${DestFile##*/} " >> $LogFile
cd $Item 2>>$ErrLogFile && cd ../
tar -zcvf $DestFile $ItemName >/dev/null 2>>$ErrLogFile
## 删除
LsCmd='ls $DestDir | grep "^$ItemName\.C.*\.bkp.tgz$"'
DelCount=$[ `eval $LsCmd | wc -l` - $RetainNum ]
if [ $DelCount -gt 0 ];then
  echo " @删除$[ $RetainNum+$DelCount ]-$DelCount" `eval $LsCmd | head -n$DelCount` >> $LogFile
  rm `eval $LsCmd | head -n$DelCount | xargs -I$ echo $DestDir/$` >/dev/null 2>> $ErrLogFile
else
  echo "" >> $LogFile
fi

done
echo "【备份结束】	`date +'%Y-%m-%d %H:%M:%S.%N'`" >> $LogFile
echo "" >> $LogFile

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值