shell周期差量备份文件夹的实现代码

shell脚本备份

创建备份脚本

backup.sh

#!/bin/sh
#$# 参数个数
#提示说明
if [ $# -lt 3 ]; then
echo "=============================================="
echo "Usage:   $0 ( commands ... )"
 echo "commands:"
 echo "example:"
 echo " > $0 bakDir bakAllName oriDirOrFile"
 echo " bakDir:备份文件件"
 echo " bakAllName:完整备份的名称"
 echo " oriDirOrFile:源文件或者文件夹"
echo "=============================================="
 exit -1
fi
#将参数赋值给变量 = 两边不能有空格
bakdir="$1"
bakName="$2"
bakAllName="$2.tar.gz"
oriDirOrFile="$3"
#保存天数 默认7天超过指定天数重新 全量备份
if [ -n $4 ];then
  bakDays=7
else
  bakDays=$4
fi

echo $bakAllName
echo $bakdir
#判断全量备份文件是否存在
if [ ! -f "$bakdir$bakAllName" ];then
  #如果没有全量备份份文件
  echo "--------all-bak---------"
  bakdir=$bakdir$bakAllName
  zl=""
else
  #已经备份了全量
  #获取全量备份的时间
  bakAllDate="`ls --full-time $bakdir$bakAllName |cut -d ' ' -f 6`"
  #获取当前时间
  nowDate=`date "+%Y-%m-%d"`
  #算出时间差单位是秒
  senconds=$(($(date +%s -d $nowDate) - $(date +%s -d $bakAllDate)));
  #计算出天
  day=$(($senconds/60/60/24))
  #增量备份但是超过备份时间需要跟新全量的备份
  if [ $day -gt $bakDays ];then
    echo "备份时间已经超过备份周期了"
    bakdir=$bakdir$bakAllName
  else
    echo "还没超过备份周期"
    echo " temp-bak"
      #增量备份文件地址
      tempDir="$bakdir$bakName`date '+%m-%d'`.tar.gz"
      #获取全量备份文件的日期
      compareDate="`ls --full-time $bakdir$bakAllName |cut -d ' ' -f 6`"
      echo "$compareDate"
      #获取全量备份文件的时间
      compareTime="`ls --full-time $bakdir$bakAllName |cut -d ' ' -f 7`"
      echo "$comcompareTime"
      #shell 格式转换成yyyy-MM-dd HH:mm:ss
      compareTime=`date -d $compareTime "+%F %T"`
      echo "$compareTime"
      #差量备份比较时间基准
      zl="-N "$compareTime""
      bakdir=$tempDir
  fi

fi
echo "--------start-bak---------"
echo $zl
echo "$bakdir"
#使用tar差量打压缩包
tar "$zl" -czvf $bakdir $oriDirOrFile

创建任务调度

创建可执行文件

touch execBakUp.sh
chmod u+xrw execBakUp.sh

添加内容

  • sh backup.sh /opt/bak/ tomcatTest /home/oriDir 5
  • /opt/bak/:你的备份需要放置的位置
  • tomcatTest:你的备份名称
  • /home/oriDir:需要备份的文件夹
  • 5:备份周期

编辑任务调度
crontab -e
秒 时 日 月 周
0 02 * * * sh /opt/execBakUp.sh >> $(date "+%Y-%m-%d".log)
每天凌晨 2点 执行execBakUp.sh

说明

参数说明:

  • $#:添加的参数个数。
  • $1~$n:添加到Shell的各参数值
  • $0:Shell本身的文件名
  • $*和$@:传递给脚本或函数的所有参数。

增量备份:

tar -cvzf text.tar.gz /bak -N i_time

i_time是时间点

获取文件时间:

ls --full-time $bakdir$bakAllName |cut -d ' ' -f 6
  • ls --full-time text.txt:显示文件完整时间
  • cut -d ' ' -f 6空格分隔 显示第6列

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Shell脚本自动删除指定大小以上的备份文件

    最近本地虚拟机的空间老是被备份给占满,为了偷懒不想自己天天登录上去清除,才写了这个自动清理脚本. 系统:centos 5.x 脚本内容: cat make_room.sh 复制代码 代码如下: #!/bin/bash #size=`df -hP|grep /dev/mapper/VolGroup00-LogVol00|awk '{print $4}'|cut -f 1 -d "G"` size=`df -mP|grep /dev/mapper/VolGroup00-LogVol00|a

  • CentOS中使用Shell脚本实现每天自动备份网站文件和数据库并上传到FTP中

    一.安装Email发送程序 复制代码 代码如下: yum install sendmail mutt 二.安装FTP客户端程序 本脚本需要用到FTP客户端程序将文件上传到FTP空间上面,因此必须安装FTP客户端,否则将出现ftp命令无法找到的错误. 安装步骤请参考:<CentOS提示ftp:command not found> 三.在/root目录下新建脚本文件:AutoBackupToFtp.sh,内容如下: 复制代码 代码如下: #!/bin/bash #你要修改的地方从这里开始 MYSQ

  • shell备份文件、重命名文件、删除指定文件的3个脚本分享

    因为经常会用到shell脚本,所以经常会写一些,但是我从来没有系统的学习过shell脚本,遇到问题,就去看手册,或者google一下,到了一定的程度才发现自己的基础真的好差.下面在系统学习shell时,顺便写了点有用的小脚本. 1,备份目录下面文件 复制代码 代码如下: #!/bin/bash E_BADARGS=65 case $# in  //$#表示转入参数的个数,sh bak.sh ./ .sh 有二个参数./和.sh 0)                     // 参数为空时,提示

  • 3个备份系统文件并邮件发送的Shell脚本分享

    1.安装MUTT邮件客户端 # yum install mutt -y 2.创建脚本 # vi /etc/rc.d/mail_to_bak_daily.sh 版本一: #!/bin/bash # ========================================================= # 请输入,你想让备份数据放置到哪个独立的目录区 basedir=/backup/daily # =============================================

  • 自动化下载并检测ftp文件备份的shell脚本

    实现代码: #!/bin/bash #ftime0=$(ll /root/hbshell/down.txt | awk '{print $7}') #ftime1=$(ll /root/hbshell/down.txt | awk '{print $7}') touch /root/hbshell/down.txt while : do if [[ /root/hbshell/down.txt -nt /root/hbshell/down_cp.txt ]] then user=root pas

  • shell编程跨服务器备份文件

    本文实例为大家分享了shell跨服务器备份文件的具体代码,供大家参考,具体内容如下 需求:查询某个文件夹下的所有文件,将文件修改时间小于当前时间,并大于当前时间前一天的文件备份到另一台服务器对应的文件夹下 思路: 1.递归查询文件夹下的文件 2.如果文件夹中含有空格,则将文件按列显示,并将IFS设为 \x0A 代码如下: #! /bin/bash function read_dir(){ IFS=$'\x0A' executeDate=`date -d ' -1 day ' +%F" "

  • shell周期差量备份文件夹的实现代码

    shell脚本备份 创建备份脚本 backup.sh #!/bin/sh #$# 参数个数 #提示说明 if [ $# -lt 3 ]; then echo "==============================================" echo "Usage: $0 ( commands ... )" echo "commands:" echo "example:" echo " > $0

  • shell命令while循环中使用sleep命令代码示例

    本文继续练习while循环语句,这里要介绍一个sleep的命令.如果写过自动化脚本,特别是selenium的同学,肯定很熟悉这个sleep.没错,sleep就是暂停的意思,例如sleep 1,表示暂停一秒,看下面练习. 1. 从1到10,每隔一秒打印一个数字 #! /bin/bash # while loops n=1 while (( $n <= 10 )) do echo $n (( n++ )) sleep 1 done 自己运行下,看下效果. 2. 实现一秒开一个终端 我们先要获取终端的

  • Python批量解压&压缩文件夹的示例代码

    目录 一.python批量解压 二.python批量压缩 一.python批量解压 提示:如果是重要数据解压前请先备份,解压后会覆盖原压缩文件!! 解压前: 解压后:文件名为英文: 文件名中包含中文: 代码如下 import os import shutil import zipfile # 首先引入需要的工具包 # shutil为后期移动文件所需,可以忽略此项 # 路径改这里! #parent_path = r'输入路径,会解压该路径下的所有zip压缩文件' parent_path = r'E

  • Shell脚本实现从文件夹中递归复制文件

    需求 前两天碰到需要在十层左右的文件夹中提取文件的需求,于是写了此脚本. 如下面这样的文件结构: 复制代码 代码如下: dir1     ├── a     │   ├── b     │   │   └── file1     │   └── file2     ├── c     │   └── d     │       ├── e     │       │   └── file4     │       └── file3     └── file5 我们需要将其中的file1~fil

  • 批处理备份文件夹和文件后发布文件夹至网站

    先将"C:\网站"下对应"D:\工程1"下面的所有文件夹和文件备份到"D:\备份2012-9-1-52647",然后再把"D:\工程1"发布到"C:\网站". 用法: backupAndPublish.bat "D:\工程1" 复制代码 代码如下: @echo off set SourceDir=%1 set now=%date:~0,4%-%date:~5,2%-%date:~8,2%

  • VBS 显示“选择文件或文件夹”对话框的代码

    一.显示"选择文件"的对话框 问: 嗨,Scripting Guy!有没有什么方法可以让我使用脚本向用户显示一个对话框,供用户选择文件使用? 答:您好.| 如果您使用的是 Windows 2000,我们不知道实现此操作的方法,至少操作系统中没有内置这样的方法. 但如果您使用的是 Windows XP,情况就不同了.在 Windows XP 上,您可以使用"UserAccounts.CommonDialog" 对象向用户显示一个标准的"文件打开"对

  • VBS获取当前目录下所有文件夹名字的代码

    VBS获取当前目录下所有文件夹名字,不包括子文件夹.我要给每个文件夹进行操作,所以最好用循环输出. 测试的时候要保证当前目录下有文件夹才可以,否则输出为空. 复制代码 代码如下: Set ws=WScript.CreateObject("wscript.shell")w=ws.CurrentDirectorySet fso=WScript.CreateObject("scripting.filesystemobject")Set fs=fso.GetFolder(w

  • js 浏览本地文件夹系统示例代码

    复制代码 代码如下: function BrowseFolder(){ try{ var Message = "请选择文件夹"; //选择框提示信息 var Shell = new ActiveXObject( "Shell.Application" ); var Folder = Shell.BrowseForFolder(0,Message,0x0040,0x11);//起始目录为:我的电脑 //var Folder = Shell.BrowseForFolde

  • vbs,hta中选择文件夹对话框实现代码

    复制代码 代码如下: on error resume next SelectFolder function SelectFolder() Const MY_COMPUTER = &H11& Const WINDOW_HANDLE = 0 Const OPTIONS = 0 Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.Namespace(MY_COMPUTER) Set

随机推荐