各个系统每天完全备份一次,备份文件是按照日期命名。不同系统的备份文件放在不同的目录,同一个系统每天不同的备份放在同一个目录。
所以需要每天清理一个备份文件。因此写了一个shell脚本,每天执行一次。
脚本程序的工作思路是:
0、读取目标目录中的文件,如果没有今天的备份文件,不处理并且打印报告。
1、读取目标目录中的文件数目,少于等于3个就不处理,并且打印报告。如果多于3个,执行第2步。
2、比较文件大小,如果3天前的备份文件大小大于2天前的备份文件大小,不处理并且打印报告。如果3天前的备份文件小于或等于2天前的文件,则删除3天前的备份文件。
3、读取目录下文件数目,并且打印。
4、所有的目标目录都执行一遍上面的程序。
#!/bin/bash path[1]="/home/confluence/" path[2]="/home/database/mms" path[3]="/home/database/oa" path[4]="/home/mms/" path[5]="/home/svn/jira" path[6]="/home/svn/jira_attach" path[7]="/home/svn/jira_mysql" path[8]="/home/svn/svn" today=`date +%Y-%m-%d` date_2day_ago=`date -d -2day +%Y-%m-%d` date_3day_ago=`date -d -3day +%Y-%m-%d` echo today is $today for((i=1;i<=8;i++)) do echo " " #start_1 function size_compare { if [ -f ${path[i]}/*$date_3day_ago* ];then #path echo ${path[i]}/*$date_3day_ago* OK! #path else echo ${path[i]}/*$date_3day_ago* not exist! #path continue fi name=`ls ${path[i]}/*$date_3day_ago*` #path #echo The will delete file name is $name if [ -f ${path[i]}/*$date_2day_ago* ];then #path echo ${path[i]}/*$date_2day_ago* OK! #path else echo ${path[i]}/*$date_2day_ago* not exist! #path continue fi name1=`ls ${path[i]}/*$date_2day_ago*` #path #echo it will compare the size with $name1 NAME=`ls -l $name |awk '{print $9}'` SIZE=`ls -l $name |awk '{print $5}'` NAME1=`ls -l $name1 |awk '{print $9}'` SIZE1=`ls -l $name1 |awk '{print $5}'` echo $NAME size is $SIZE echo $NAME1 size is $SIZE1 if [ $SIZE -le $SIZE1 ];then ` rm -f $NAME` echo $NAME Delete Successful! else echo sizebad! fi } ############ today backup file exist or not!##################### if [ -f ${path[i]}/*$today* ];then #path echo today ${path[i]}/*$today* exist! #path else echo Today ${path[i]}/*$today* not exist! #path continue fi numbers=`find ${path[i]} -type f |wc -l` #path if [ $numbers -ge 4 ];then echo ${path[i]} have $numbers more than 3! #path size_compare #continue else echo ${path[i]} numbers less 4! #warning fi done #end_1 echo " " for ((i=1;i<=8;i++)) #start_2 do #test=`ll |grep ".sql$" |wc -l` numbers=`find ${path[i]} -type f |wc -l` #echo There are $numbers files in the current directory! echo ${path[i]} have $numbers files done #end_2 echo " " echo " " #ls -l /home/src/ |sed '1d'| awk '{print $5 "\t" $9}' > a.txt #sed -n '2p' a.txt #size=`sed -n '2p' a.txt |awk '{print $1}'` #name=`sed -n '2p' a.txt |awk '{print $2}'` #echo $name $size #rm -f a.txt