脚本名称: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
网友评论