题目:
1. 源文件夹A,A下面还有多层级的结构
2. 备份文件夹B,每周六晚上2点发起备份,以当天日期命名建新文件夹,将A文件夹下面所有文件和目录全部拷贝过去
3. 定期循环清理,B文件夹下最多只能保存6个备份,当已经满6个备份文件后,再开始新的备份时,删除一个备份(删除的备份文件有条件,参考第4点)
4. 保留距离最近的4个备份,然后,再之前的两个月各保留一个备份
代码:
#!/bin/bash
#将备份时间写入log日志中
echo "----------------------------" >> log
echo "backup time:$(date +%Y%m%d)" >> log
echo "----------------------------" >> log
#1.备份文件夹
#需要被备份的路径
AFILE=/mnt/hgfs/share/A
#需要备份的路径
BFILE=/mnt/hgfs/share/B
#现在时间
NOW_TIME=$(date +%Y%m%d)
#判断目录是否存在,不存在就创建
[ -d $BFILE ] || mkdir $BFILE
#将A目录拷贝到B目录下并以时间命名
cp -r $AFILE $BFILE/$NOW_TIME && echo " 备份完成! " || echo "备份失败,请检查错误!"
echo "---------------------------------"
#2.删除文件夹
#转到备份目录下
cd /mnt/hgfs/share/B
#查找当前目录下文件夹个数
FILE_DATA=$(ls -l |grep "^d" |wc -l)
#判断备份目录下的文件夹个数是否超过7个,没超出就继续,超出就退出
[ $FILE_DATA -gt 7 ] && echo "备份目录下文件夹个数大于7!!!请检查代码。" && exit
#当前日期的三周前
OLDW3_TIME=$(date -d -3week +%Y%m%d)
#当前日期的三周前天数
OLDW3_DAY=$(date -d -3week +%d)
#判断当前目录下文件夹个数是否达到7个,是的话说明已经有三个月前的文件夹,需要删除
[ $FILE_DATA -eq 7 ] && ls -rt|head -1|xargs rm -rf && echo "删除了三月前的文件夹!!!"
#判断是否有三周前的文件夹,再判断是不是月初的周
if [ -d "$OLDW3_TIME" ]; then
if [ $OLDW3_DAY -gt 7 ]; then #如果三周前的天数是大于7的,说明不是月初的第一个周,那么直接删除
rm -rf $OLDW3_TIME
echo "删除三周前的文件夹!!!"
else #如果小于等于7,则选择不删除
echo "该文件夹为月初文件夹,不能删除!!!"
fi
fi
定时用的是:
crontab -e
0 2 * * 6 执行的脚本(*.sh)
版权声明:本文为qq_45955592原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。