目录
1、背景:
在日常运维中遇到一个业务系统,系统中有一个其中的业务功能是存放上传的jpg文件、pdf文件等上传文件的,该功能的文件上传之后,系统会自动读取相关的内容,存放的时间也是不需要很久的,到一定的时间是可以删除掉的,无需长期进行保存的。这样的场景就有一个运维工作就是需要定期的去进行文件的删除,释放出空间来,这个存放的路径是单独的一个磁盘的。
文件存放的路径是按照如下的规则生成的:
1、首先在存放的根路径下,创建一个年份的目录,例如;2022
2、进入到2022年份目录下,创建当前月份的目录,例如01
3、进入到01月份目录下,创建当前日期的目录,例如01
4、当天01号下的所有上传文件都存放该日期目录下。
样例:
[root@~ 16]# pwd /appserver/2022/06/16
2、shell脚本开发需求:
1、shell脚本在执行清理的时候需要打印日志,并将打印的日志写入到指定的日志文件中去;
2、shell脚本执行的时候需要从根目录进行判断,也就是需要从/appserver目录下;
3、shell脚本执行的时候需要删除时间最久之前的文件;
4、shell脚本的时候需要判断根据日期创建的目录下是否存在文件,不存在的则删除,存在则进行校验;
5、shell脚本执行的时候需要根据该目录挂载磁盘的使用率,从而判断是否进行删除操作,到达75%使用率以上就删除,没有超过的75%则不用进行删除的操作;
6、shell脚本执行的时候需要输入指定参数,参数不满足则提示信息。
3、shell脚本开发过程:
根据需求要求需要使用到如下的shell知识:
1、日志打印并写入,需要使用到日志打印的函数
2、日期目录和子目录的判断需要使用到for语句和if语句
3、需要输入参数进行判断执行,需要使用到case模式匹配语句
4、需要判断指定目录下的使用率,需要变量
4、shell脚本开发结果:
#!/bin/bash
#author:jiang
#time:2022-05-13
#固定路径
workdir=/appserver
#日志函数
#脚本输出信息提示函数,$1取值显示的文字的颜色,31表示红色 32表示绿色的,$2取值日志显示的内容
#tee –a 将打印的日志输入到指定的日志文件中记录,按照日志内容追加的方式,以便复盘发版过程。
log_output () {
if [ ! -f /var/log/del-jgp-pdf.log ]
then
cd /var/log/
touch /var/log/del-jgp-pdf.log
fi
echo -e "\e[$1m[$(date +"%F %T")] $2 \e[0m"
}
#函数的方式进行调用处理
del_jpg_pdf () {
yaer=(`cd ${workdir};ls .`)
for i in ${yaer[@]}
do
log_output 32 "INFO 当前在${workdir}/$i目录下进行相关的操作" | tee -a /var/log/del-jgp-pdf.log
#判断该年份目录下是否存在子目录,存在继续校验,没有则删除掉该年份目录
nf=`cd ${workdir}/$i;ls . | wc -l`
if [ $nf -eq 0 ]
then
log_output 31 "INFO 当前在${workdir}/$i目录下进行不存在任何的子目录,将要删除该目录操作" | tee -a /var/log/del-jgp-pdf.log
cd ${workdir}/
rm -rfv $i > /dev/null
else
month=(`cd ${workdir}/$i;ls .`)
for a in ${month[@]}
do
log_output 32 "INFO 当前在${workdir}/$i/$a目录下进行相关的操作" | tee -a /var/log/del-jgp-pdf.log
#判断该月份目录下是否存在子目录,存在继续校验,没有则删除掉该月份目录
mu=`cd ${workdir}/$i/$a; ls . | wc -l`
if [ $mu -eq 0 ]
then
log_output 31 "INFO 当前在${workdir}/$i/$a目录下进行不存在任何的子目录,将要删除该目录操作" | tee -a /var/log/del-jgp-pdf.log
cd ${workdir}/$i
rm -rfv $a > /dev/null
else
day=(`cd ${workdir}/$i/$a;ls .`)
for n in ${day[@]}
do
log_output 32 "INFO 当前在${workdir}/$i/$a/$n目录下进行相关的操作" | tee -a /var/log/del-jgp-pdf.log
use=`df -h | grep /szprn1_cmfh_fhfms_fias | awk -F" " '{print $5}' | cut -d "%" -f 1`
if [ $use -ge 75 ]
then
cd ${workdir}/$i/$a
log_output 32 "INFO 删除${workdir}/$i/$a/$n目录及目录下的所有文件操作" | tee -a /var/log/del-jgp-pdf.log
rm -rfv $n > /dev/null
else
exit
fi
done
fi
done
fi
done
}
case $1 in
delete)
del_jpg_pdf
;;
*)
echo -e "\e[32m请按提示执行如下命令:\n \
./del_jpg_pdf.sh delete\n \
delete --> 启动清理的操作操作\e[m" | tee -a /var/log/del-jgp-pdf.log
esac
5、shell脚本开发结果验证
需要到创建相关的目录和子目录
如下的样例:
/appserver/2022/06/16
创建的jpg和pdf文件,可以利用
dd if=/dev/zero of=01.jpg count=1 bs=100M
执行过程如
[2022-05-19 14:58:53] INFO 当前在/appserver/2022目录下进行相关的操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/01目录下进行相关的操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/01目录下进行不存在任何的子目录,将要删除该目录操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/02目录下进行相关的操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/02/01目录下进行相关的操作
[2022-05-19 14:58:53] INFO 删除/appserver/2022/02/01目录及目录下的所有文件操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/02/02目录下进行相关的操作
[2022-05-19 14:58:53] INFO 删除/appserver/2022/02/02目录及目录下的所有文件操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/02/03目录下进行相关的操作
[2022-05-19 14:58:53] INFO 删除/appserver/2022/02/03目录及目录下的所有文件操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/02/04目录下进行相关的操作
[2022-05-19 14:58:53] INFO 删除/appserver/2022/02/04目录及目录下的所有文件操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/02/05目录下进行相关的操作
[2022-05-19 14:58:53] INFO 删除/appserver/2022/02/05目录及目录下的所有文件操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/02/06目录下进行相关的操作
[2022-05-19 14:58:53] INFO 删除/appserver/2022/02/06目录及目录下的所有文件操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/02/07目录下进行相关的操作
[2022-05-19 14:58:53] INFO 删除/appserver/2022/02/07目录及目录下的所有文件操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/02/08目录下进行相关的操作
[2022-05-19 14:58:53] INFO 删除/appserver/2022/02/08目录及目录下的所有文件操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/02/09目录下进行相关的操作
[2022-05-19 14:58:53] INFO 删除/appserver/2022/02/09目录及目录下的所有文件操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/02/10目录下进行相关的操作
[2022-05-19 14:58:53] INFO 删除/appserver/2022/02/10目录及目录下的所有文件操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/02/11目录下进行相关的操作
[2022-05-19 14:58:53] INFO 删除/appserver/2022/02/11目录及目录下的所有文件操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/02/12目录下进行相关的操作
[2022-05-19 14:58:53] INFO 删除/appserver/2022/02/12目录及目录下的所有文件操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/02/13目录下进行相关的操作
[2022-05-19 14:58:53] INFO 删除/appserver/2022/02/13目录及目录下的所有文件操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/02/14目录下进行相关的操作
[2022-05-19 14:58:53] INFO 删除/appserver/2022/02/14目录及目录下的所有文件操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/02/15目录下进行相关的操作
[2022-05-19 14:58:53] INFO 删除/appserver/2022/02/15目录及目录下的所有文件操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/02/16目录下进行相关的操作
[2022-05-19 14:58:53] INFO 删除/appserver/2022/02/16目录及目录下的所有文件操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/03目录下进行相关的操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/03/01目录下进行相关的操作
[2022-05-19 14:58:53] INFO 删除/appserver/2022/03/01目录及目录下的所有文件操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/03/02目录下进行相关的操作
[2022-05-19 14:58:53] INFO 删除/appserver/2022/03/02目录及目录下的所有文件操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/03/03目录下进行相关的操作
[2022-05-19 14:58:53] INFO 删除/appserver/2022/03/03目录及目录下的所有文件操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/03/04目录下进行相关的操作
[2022-05-19 14:58:53] INFO 删除/appserver/2022/03/04目录及目录下的所有文件操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/03/05目录下进行相关的操作
[2022-05-19 14:58:53] INFO 删除/appserver/2022/03/05目录及目录下的所有文件操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/03/06目录下进行相关的操作
[2022-05-19 14:58:53] INFO 删除/appserver/2022/03/06目录及目录下的所有文件操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/03/07目录下进行相关的操作
[2022-05-19 14:58:53] INFO 删除/appserver/2022/03/07目录及目录下的所有文件操作
[2022-05-19 14:58:53] INFO 当前在/appserver/2022/03/08目录下进行相关的操作
[2022-05-19 14:58:53] INFO 删除/appserver/2022/03/08目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/03/09目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/03/09目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/03/10目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/03/10目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/03/11目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/03/11目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/03/12目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/03/12目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/03/13目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/03/13目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/03/14目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/03/14目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/03/15目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/03/15目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/03/16目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/03/16目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/04目录下进行相关的操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/04/01目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/04/01目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/04/02目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/04/02目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/04/03目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/04/03目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/04/04目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/04/04目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/04/05目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/04/05目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/04/06目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/04/06目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/04/07目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/04/07目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/04/08目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/04/08目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/04/09目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/04/09目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/04/10目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/04/10目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/04/11目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/04/11目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/04/12目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/04/12目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/04/13目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/04/13目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/04/14目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/04/14目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/04/15目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/04/15目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/04/16目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/04/16目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/05目录下进行相关的操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/05/01目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/05/01目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/05/02目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/05/02目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/05/03目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/05/03目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/05/04目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/05/04目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/05/05目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/05/05目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/05/06目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/05/06目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/05/07目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/05/07目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/05/08目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/05/08目录及目录下的所有文件操作
[2022-05-19 14:58:54] INFO 当前在/appserver/2022/05/09目录下进行相关的操作
[2022-05-19 14:58:54] INFO 删除/appserver/2022/05/09目录及目录下的所有文件操作
[2022-05-19 14:58:55] INFO 当前在/appserver/2022/05/10目录下进行相关的操作
[2022-05-19 14:58:55] INFO 删除/appserver/2022/05/10目录及目录下的所有文件操作
[2022-05-19 14:58:55] INFO 当前在/appserver/2022/05/11目录下进行相关的操作
[2022-05-19 14:58:55] INFO 删除/appserver/2022/05/11目录及目录下的所有文件操作
[2022-05-19 14:58:55] INFO 当前在/appserver/2022/05/12目录下进行相关的操作
[2022-05-19 14:58:55] INFO 删除/appserver/2022/05/12目录及目录下的所有文件操作
[2022-05-19 14:58:55] INFO 当前在/appserver/2022/05/13目录下进行相关的操作
[2022-05-19 14:58:55] INFO 删除/appserver/2022/05/13目录及目录下的所有文件操作
[2022-05-19 14:58:55] INFO 当前在/appserver/2022/05/14目录下进行相关的操作
[2022-05-19 14:58:55] INFO 删除/appserver/2022/05/14目录及目录下的所有文件操作
[2022-05-19 14:58:55] INFO 当前在/appserver/2022/05/15目录下进行相关的操作
[2022-05-19 14:58:55] INFO 删除/appserver/2022/05/15目录及目录下的所有文件操作
[2022-05-19 14:58:55] INFO 当前在/appserver/2022/05/16目录下进行相关的操作
[2022-05-19 14:58:55] INFO 删除/appserver/2022/05/16目录及目录下的所有文件操作
[2022-05-19 14:58:55] INFO 当前在/appserver/2022/06目录下进行相关的操作
[2022-05-19 14:58:55] INFO 当前在/appserver/2022/06/01目录下进行相关的操作
[2022-05-19 14:58:55] INFO 删除/appserver/2022/06/01目录及目录下的所有文件操作
[2022-05-19 14:58:55] INFO 当前在/appserver/2022/06/02目录下进行相关的操作
[2022-05-19 14:58:55] INFO 删除/appserver/2022/06/02目录及目录下的所有文件操作
[2022-05-19 14:58:55] INFO 当前在/appserver/2022/06/03目录下进行相关的操作
[2022-05-19 14:58:55] INFO 删除/appserver/2022/06/03目录及目录下的所有文件操作
[2022-05-19 14:58:55] INFO 当前在/appserver/2022/06/04目录下进行相关的操作
[2022-05-19 14:58:55] INFO 删除/appserver/2022/06/04目录及目录下的所有文件操作
[2022-05-19 14:58:55] INFO 当前在/appserver/2022/06/05目录下进行相关的操作
[2022-05-19 14:58:55] INFO 删除/appserver/2022/06/05目录及目录下的所有文件操作
[2022-05-19 14:58:55] INFO 当前在/appserver/2022/06/06目录下进行相关的操作
[2022-05-19 14:58:55] INFO 删除/appserver/2022/06/06目录及目录下的所有文件操作
[2022-05-19 14:58:55] INFO 当前在/appserver/2022/06/07目录下进行相关的操作
[2022-05-19 14:58:55] INFO 删除/appserver/2022/06/07目录及目录下的所有文件操作
[2022-05-19 14:58:55] INFO 当前在/appserver/2022/06/08目录下进行相关的操作
[2022-05-19 14:58:55] INFO 删除/appserver/2022/06/08目录及目录下的所有文件操作
[2022-05-19 14:58:55] INFO 当前在/appserver/2022/06/09目录下进行相关的操作
[2022-05-19 14:58:55] INFO 删除/appserver/2022/06/09目录及目录下的所有文件操作
[2022-05-19 14:58:55] INFO 当前在/appserver/2022/06/10目录下进行相关的操作
[2022-05-19 14:58:55] INFO 删除/appserver/2022/06/10目录及目录下的所有文件操作
[2022-05-19 14:58:55] INFO 当前在/appserver/2022/06/11目录下进行相关的操作
[2022-05-19 14:58:55] INFO 删除/appserver/2022/06/11目录及目录下的所有文件操作
[2022-05-19 14:58:55] INFO 当前在/appserver/2022/06/12目录下进行相关的操作
总结:
如上就如何去清理以日期格式创建目录并存放文件的文件清理shell脚本了,其他的以日期形式创建的系统和应用也是可以借鉴的。
希望可以帮助到家,感谢大佬的支持点赞加关注!!!
自动化清理:shell脚本定期删除过期日期文件
本文介绍了如何使用shell脚本在/appserver目录下定期清理按日期组织的jpg和pdf文件,涉及日志记录、参数判断、磁盘使用率监控及文件删除策略。
1236

被折叠的 条评论
为什么被折叠?



