shell脚本:文件夹备份机制

  • Post author:
  • Post category:其他


题目:

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 版权协议,转载请附上原文出处链接和本声明。