定期备份服务器上的项目到本地服务器
思路:
一,遍历项目,压缩存储,只保留最近两天的,过期的删除
二,定时执行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,删除本地备份过期的压缩包
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix