美文网首页
SHELL删除N天前数据

SHELL删除N天前数据

作者: 无量儿 | 来源:发表于2020-10-19 16:59 被阅读0次

    脚本名称:delete_overdue_data.sh
    脚本作用:磁盘空间不足,需定期删除以日期为目录名的数据目录,例如删除3天前的数据。

    #!/bin/bash
    
    if [ ! -n "$1" ]; then
      echo "Missing parameter."
      exit 1
    fi
    
    data_date=$1
    data_path="/a/b/c/"
    retention_days=3  # 保留天数
    log_time=$(date "+%Y%m%d%H%M%S")
    log_name="/a/b/c/log/${0%.*}-${data_date}-${log_time}.log"  # 日志全路径
    
    # 检查日期参数是否合法
    if echo ${data_date} | grep -Eq "[0-9]{4}[0-9]{2}[0-9]{2}" && date -d ${data_date} + %Y%m%d > /dev/null 2>&1
    then
      t1=`date -d "${data_date} +%s"`  # 将日期转换为数字
      echo "["$(date "+%Y-%m-%d %H:%M:%S")"] 将日期${data_date}转换为数字${t1}" >> ${log_name}
      echo "将日期${data_date}转换为数字${t1}"
    else
      echo "["$(date "+%Y-%m-%d %H:%M:%S")"] 输入的日期参数格式不正确,应为yyyymmdd" >> ${log_name}
      echo "输入的日期参数格式不正确,应为yyyymmdd"
      exit 1
    fi
    
    for dir in $(ls ${data_path})  # 循环获取目录内的文件名
    do
      if echo ${dir} | grep -Eq "[0-9]{4}[0-9]{2}[0-9]{2}" && date -d ${dir} + %Y%m%d > /dev/null 2>&1 # 检查目录日期是否合法
      then
        t2=`date -d "${dir}" + %s`
        echo "["$(date "+%Y-%m-%d %H:%M:%S")"] 将目录名日期${dir}转换为数字${t2}" >> ${log_name}
        # 两个日期时间戳的差值除以每天86400s即为天数差
        stamp_diff=`expr ${t1}-${t2}`
        echo "["$(date "+%Y-%m-%d %H:%M:%S")"] 日期相差秒数:${stamp_diff}" >> ${log_name}
        day_diff=`expr ${stamp_diff} / 86400`
        echo "["$(date "+%Y-%m-%d %H:%M:%S")"] 日期相差天数:${day_diff}" >> ${log_name}
        if [ ${day_diff} -gt ${retention_days} ]; then
          if [ -d ${data_path}${dir} ]; then
            echo "["$(date "+%Y-%m-%d %H:%M:%S")"] 删除${retention_days}天前的目录:${data_path}${dir}" >> ${log_name}
            echo "删除${retention_days}天前的目录:${data_path}${dir}"
            echo "["$(date "+%Y-%m-%d %H:%M:%S")"] rm -rf ${data_path}${dir}" >> ${log_name}
            rm -rf ${data_path}${dir}
          else
            echo "["$(date "+%Y-%m-%d %H:%M:%S")"] 不存在目录:${data_path}${dir}" >> ${log_name}
            echo "不存在目录:${data_path}${dir}"
            exit 1
          fi
        fi
      fi
    done
    

    相关文章

      网友评论

          本文标题:SHELL删除N天前数据

          本文链接:https://www.haomeiwen.com/subject/izakmktx.html