定期备份服务器上的项目到本地服务器

思路:

一,遍历项目,压缩存储,只保留最近两天的,过期的删除

二,定时执行shell脚本通过sftp下载压缩包,定期清理备份文件,超过两天的就删除掉了

####################################################################

1.遍历项目,压缩存储

#下面这行代码并不是注释,它的作用是表名该脚本使用哪个shell解释器
#! /bin/sh

#变量赋值,等号=两边不能有空格
#需要处理的文件目录
from=/data/IFP/data/register
#zip包存放目录
to=/data/myimg

#判断符号、运算符号等,左右两边的变量或值,与符号之间都需有空格
#判断源文件目录是否为空
if test ! -d $from
then
        mkdir -p $from
fi


#path dir to

if test ! -d $to
then
        mkdir -p $to
fi

#从命令入参获取开始时间和结束时间
#start date
start=$1

#end date
end=$2

#如果开始时间小于登录结束时间,则执行循环
while [ $start -le $end ]
do
    #先清空数组
    unset fileList

    #查询源文件路径下所有文件,使用grep过滤包含开始时间的文件
    #此处使用小括号把命令括起来执行,否则获取数组长度一直为1
    fileList=(`ls $from/* |grep "${start}"`)
    len=${#fileList[@]}

    echo "len:$len"

    if test $len -gt 0
    then
        mkdir -p $to/${start}

        #for filename in $fileList如此使用不规范,出现只遍历第一个值的错误情况
        for filename in ${fileList[@]}
        do

            if [ -f $filename ]
            then
                #将源文件复制到按月分开的文件中
                cp $filename ${to}/${start}/
            else
                continue
            fi
        done

        #将按月存放的源文件打成zip包,-q表示安静的执行,-m表示打包完成后删除源文件
        zip -rqm $to/${start}.zip ${to}/${start}
    fi
        #将开始时间增加一个月
        start=`date -d "+1 month ${start}01" +%Y%m`
done

#delete package
#删除目标文件中存放复制源文件的文件夹,
#ls ${to}/ |grep -v "zip"表示查找指定目录加所有文件,但过滤调zip文件,-v是取反,不包含的意思
#因为zip命令使用了-m参数,即不再用使用下面的命令
#rm -rf `ls ${to}/ |grep -v "zip"`

2,保留两天,过期删除

3.定期下载服务器上的压缩包

完整的sftp下载脚本如下:

#!/bin/bash
#SFTP配置信息
#IP
IP=1.1.1.1
#端口
PORT=22
#用户名
USER=username
#密码
PASSWORD=password
#待接收下载文件根目录
CLIENTDIR=/client/download
#服务器待下载目录
SEVERDIR=/server/download
#待下载文件名
FILE=filename

lftp -u ${USER},${PASSWORD} sftp://${IP}:${PORT} <<EOF
cd ${SEVERDIR}/
lcd ${CLIENTDIR}
get ${FILE}
by
EOF

 4,删除本地备份过期的压缩包

原文地址:https://www.cnblogs.com/peteremperor/p/9673321.html