各个系统每天完全备份一次,备份文件是按照日期命名。不同系统的备份文件放在不同的目录,同一个系统每天不同的备份放在同一个目录。

所以需要每天清理一个备份文件。因此写了一个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