美文网首页
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天前数据

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

  • linux删除大文件的前n行

    linux删除大文件的前n行 在数据挖掘中我们经常会增量更新训练日志,需要删除前n行的过期数据,直接用sed命令比...

  • vim的操作小细节

    删除 删除当前字符 [n]x(删除前一个[n]X) 删除当前行 d[n] + (hjkl/方向键)(D删除当前字...

  • 安卓的常用命令

    adb shell pm clear 清楚指定包的缓存数据 adb shell am start -n ...

  • SpringBoot整合Redis作为缓存(三)

    shell 操作redis部分: //删除当前数据库中的所有Keyflushdb//删除所有数据库中的keyflu...

  • 常用SQL

    删除前七天的数据 导出数据 导入数据 备份表

  • delete & truncate

    删除数据 delete 允许使用条件 (删除符合条件的数据);允许使用limit限制删除的记录数:limit n;...

  • GATK后maftools可视化

    #####删除文件的前N行#### tail -n +N Het-158-rawGATK-indel-filter...

  • 2019-06-03

    离线数据开发 一、同一计算平台 实时技术 离线:在今天(T)处理N天前(T-N,N>=1的数据),时间粒度为天。 ...

  • Shell 脚本自我删除

    bash 中有 $0, $1, ....$n等特殊变量。其中$0代表脚本自身。因此shell脚本完成自我删除,只需...

网友评论

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

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