Shell脚本:根据输入时间段备份压缩日志文件 -Linux版

Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作。

首行中的符号#!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程 序。如果首行没有这句话,在执行脚本文件的时候,将会出现错误。后续的部分就是主程序,Shell脚本像高级语言一样,也有变量赋值,也有控制语句。除第 一行外,以#开头的行就是注释行,直到此行的结束。如果一行未完成,可以在行尾加上",这个符号表明下一行与此行会合并为同一行

#将所需目录中选中的日期内文件夹打包(tar包) 并按输入时间间隔分段
#1 所需目录
#2 起始日期
#3 截止日期
#4 ---时间间隔(月份)
#5 ---输出目录
#!/bin/bash
input_dir=$1    #第一个参数
date_start=$2   #第二个参数
date_end=$3
#结束日期格式转换
end=$(date +%s -d "${date_end}")
start=$(date +%s -d "${date_start}")
#input split interval
m=3    #时间间隔参数   3:表示每3个月一个压缩包
output_dir="/calogs/test/test2"
echo "===START==="
cd $input_dir
value=$(($end-$start))    #时间相隔天数
#删除操作
while test $value -gt 0
do
  mthago=$(date +%Y%m%d -d "${date_start} ${m} months")
  mthago=$(date +%Y%m%d -d "${mthago} 1 days ago")
  #转换为日期格式
  mthago_time=$(date +%s -d "${mthago}")
  #比较三月后日期是否大于结束日期
  comp1=$(($end-$mthago_time))
  if test $comp1 -le 0
  then
     mthago=$date_end
     #如果小于则赋值为结束日期
     mthago_time=$(date +%s -d "${mthago}")
  fi
  outdir=$output_dir/${input_dir##*/}-$date_start-$mthago.tar   #tar包名称
#  echo $outdir
     if test -f $outdir
     then
        rm -f $outdir
     fi
   date_start=$(date +%Y%m%d -d "${mthago} 1 days ")   #获取开始某日期后一天 1为变量(整数)
   start=$(date +%s -d "${date_start}")     
   value=$(($end-$start))
done
#添加操作
date_start=$2
start=$(date +%s -d "${date_start}")
value=$(($end-$start))
while test $value -ge 0
do
  mthago=$(date +%Y%m%d -d "${date_start} ${m} months")   #获取开始某日期几个月后一天 ${m}为变量(整数)
  mthago=$(date +%Y%m%d -d "${mthago} 1 days ago")
  #转换为日期格式
  mthago_time=$(date +%s -d "${mthago}")
  #比较三月后日期是否大于结束日期
  comp1=$(($end-$mthago_time))
  if test $comp1 -le 0   #$comp1是否小于0
  then
     mthago=$date_end
     #如果小于则赋值为结束日期
     mthago_time=$(date +%s -d "${mthago}")
  fi
  outdir=$output_dir/${input_dir##*/}-$date_start-$mthago.tar
  
  comp2=$(($mthago_time-$start))
 
  while test $comp2 -ge 0   #$comp2是否大于等于0
  do 
     if test -d $date_start
     then
         tar -cf $outdir $date_start    #初次生成tar包
         echo "$outdir"
         date_start=$(date +%Y%m%d -d "${date_start} 1 days ")
         start=$(date +%s -d "${date_start}")
         comp2=$(($mthago_time-$start)) 
         while test $comp2 -ge 0
         do
           if test -d $date_start    #判断文件夹是否存在
           then       
                tar -uf $outdir $date_start    #往tar包中追加文件
                #echo "[ $date_start ]"
           fi
           date_start=$(date +%Y%m%d -d "${date_start} 1 days ")
           start=$(date +%s -d "${date_start}")
           comp2=$(($mthago_time-$start))  
         done
     else         
         date_start=$(date +%Y%m%d -d "${date_start} 1 days ")
         start=$(date +%s -d "${date_start}")
         comp2=$(($mthago_time-$start)) 
     fi  
   done     
   value=$(($end-$start))
done
echo "===FINISHED==="

运行命令(sh文件后跟参数):

sh /calogs/new.sh /calogs/test 20160101 20161230

 

posted @ 2016-08-04 16:20  Allen.Zhao  阅读(5096)  评论(0编辑  收藏  举报