定时备份网站数据(不含数据库)的脚本

海外服务器 (489) 2015-10-26 17:47:20

#!/bin/bash
#backup-website.sh

time=$(date +%y-%m-%d:%H:%S)
path=/home/website-backup

if [ ! -d $path ]
then
        mkdir -p /$path
fi

cp -r /home/www/html/safexjt "$path/$time"

now=$(date +%s)

for i in `ls $path`
do
        date=${i:0:8}
        xtime=`date -d $date +%s`
        s=`expr $now - $xtime`
        if [ $s -gt 216000 ]
        then
                rm -rf $path/$i
        fi
done
______________________________________________________________________________________________________
从这里开始解释部分代码

time=$(date +%y-%m-%d:%H:%S) 备份文件的格式为 年-月-日:时:分。

为什么我不备份成 年-月-日-时-分呢? 这样不容易理解,也无法转换到Uninx时间戳。

为什么不备份成 年-月-日 时:分 呢? 因为在遍历目录的时候,bash会把它拆分成两个字符串"年-月-日" 和 "时:分"。

这里强调一下"年-月-日:时:分"这种格式也是无法转换成时间戳的,我们需要截取字符串。

for i in `ls $path` ;do echo $i;done 通过``命令替换,把目录下面的文件名称和者子目录名称赋值给一个数组,i再遍历这个数组,由于 '年-月-日:时:分'无法转换成时间戳,所以我们截取'年-月-日',来计算'年-月-日'的时间戳。

date=${i:0:8}  从$i的第1个字符串开始截取,截取八个.0表示从第一个,8表示截取八个字符串,我们知道Uninx时间戳是按秒计算的,当前时间的时间戳是从1970-01-01 00:00:00经过的秒数,我们可以计算当前时间(now=date +%s)与文件创建时间(date变量) 直接的相差秒数,除以86400(一天的秒数)来计算是几天前的文件:
 s=`expr $now - $xtime`
        if [ $s -gt 216000 ]

这里我们拿两个时间的相差秒数($)与 216000(2.5天)进行对比,如果是2.5天之前的,就删除它。

Uninx任务计划每六个小时只需一次,可以这么写0 */6 * * * /usr/local/src/backup-website.sh保存,重启crond服务。

THE END