zoukankan      html  css  js  c++  java
  • 定期备份服务器上的项目到本地服务器

    思路:

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

    二,定时执行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,删除本地备份过期的压缩包

  • 相关阅读:
    node.js 入门笔记3
    Linux常用命令大全(非常全!!!)
    数据库导入导出命令(结构+数据)?
    列举 创建索引但是无法命中索引的8种情况。
    简述触发器、函数、视图、存储过程?
    什么是事务?MySQL如何支持事务?
    简述数据库三大范式
    MySQL常见数据库引擎及比较?
    列举常见的关系型数据库和非关系型都有那些?
    操作系统常见面试题
  • 原文地址:https://www.cnblogs.com/peteremperor/p/9673321.html
Copyright © 2011-2022 走看看