shell脚本实践:自动清理文件,以时间方式形成路径的图片或者是Excel、pdf等文件

自动化清理:shell脚本定期删除过期日期文件
本文介绍了如何使用shell脚本在/appserver目录下定期清理按日期组织的jpg和pdf文件,涉及日志记录、参数判断、磁盘使用率监控及文件删除策略。

目录

1、背景:

2、shell脚本开发需求:

3、shell脚本开发过程:

4、shell脚本开发结果:

 5、shell脚本开发结果验证

总结:


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脚本了,其他的以日期形式创建的系统和应用也是可以借鉴的。

希望可以帮助到家,感谢大佬的支持点赞加关注!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jiang0615csdn

你对鼓励是我最大的动力来源

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值