使用linux-shell脚本清理数据文件和日志文件

时间:2025-03-11 10:19:50

本文将介绍使用调用linux-shell公共方法,实现指定天数之前文件和文件夹清理、以及制定文件大小的文件清理功能。
主要涉及四个方面:
1、指定日期前的文件夹清理
2、指定日期前的文件清理
3、文件超过一定大小进行自动清理,tomcat中文件
4、tomcat日志文件清理

linux实现指定天数之前文件清理以及日志文件大小清理

  • 1、指定日期前的文件夹清理
  • 2、指定日期前的文件清理
  • 3、文件超过一定大小进行自动清理,tomcat中文件
  • 4、tomcat日志文件清理

1、指定日期前的文件夹清理

该方法是实现对指定日期前的文件夹清理功能,比如想清理今天之前10天的所有文件夹数据,只需要调用方法,输入要清理的文件的路径和要保留的天数即可,如:fClearFold /home/vlog/test 10

#!/bin/sh
currDate=`date +%Y-%m-%d`
currDate8=${currDate//-/}
##!@NOTE:数据文件夹清理,适合删除日期文件夹是八位的,如20230808
##!@IN: 1 -> 需要删除的源文件路径
##!@IN: 2 -> 保留天数
##!@SAMPLE: fClearFold sourceDir saveDays
function fClearFold
{
	local sourceDir=$1
	local saveDays=$2
	dateFoldArr=`ls $sourceDir` 
	for dateFold in ${dateFoldArr[*]}
	do
		#文件夹都是2开头的
		if [[ ${dateFold:0:1} -eq "2" ]];then
			dateCompare=`date -d "$currDate8 - $saveDays day" + %Y%m%d`
			if [ $? -eq 0] [[ $dateFold -le $dateCompare ]];then
				rm -rf $sourceDir/$dateFold 
			fi
		fi		
    done
}
#调用方法清理文件夹,保留30天
fClearFold /home/test/data 30

2、指定日期前的文件清理

该方法是实现对指定日期前的文件清理功能,比如想清理今天之前10天的所有文件数据,只需要调用方法,输入要清理的文件的路径和要保留的天数即可,如:fClearLog /home/vlog/test 10

#!/bin/sh
currDate=`date +%Y-%m-%d`
currDate8=${currDate//-/}
##!@NOTE:数据文件清理
##!@IN: 1 -> 需要删除的源文件路径
##!@IN: 2 -> 保留天数
##!@SAMPLE: fClearLog sourceDir saveDays
function fClearLog 
{
	local sourceDir=$1
	local saveDays=$2
	[ -d $sourceDir ] && cd $sourceDir
	for fileName in `ls`
	do
		dateCompare=`date -d "$currDate8 - $saveDays day" + %Y%m%d`
		#防止匹配出错,需确保倒数12位开始,取8位,为纯数字
		if echo "${fileName:0-12:8} |grep -q "^[0-9]*$" ;then
			#文件都是形如 abcde_test_20230202.txt,倒数第12位开始,选取8位就是20230202
			if [[ ${fileName:0-12:8} -le  $dateCompare ]];then
				rm -rf $sourceDir/$fileName
			fi	
		fi	
	done
}	
#调用方法清理文件即可,保留30天
fClearLog /home/test/data 30

3、文件超过一定大小进行自动清理,tomcat中文件

在实际的工作中,可能会定期的清理日志文件或者数据文件,以及某一个特定文件。当它的大小达到一定程度,为了磁盘空间和读写速度,都需要定期迁移和清理。下面就分享一个tomcat中文件的定期清理方法。

#!/bin/sh
currDate=`date +%Y-%m-%d`
currDate8=${currDate//-/}
##!@NOTE:文件超过一定大小进行自动清理
##!@IN: 1 -> 文件名
##!@IN: 2 -> 文件大小
##!@SAMPLE: CheckFileSize fileName fileSmallSize
function CheckFileSize
{
	local fileName=$1
	#设置文件的最小值,1024代表1M,524288代表512M,1048576代表1G
	local fileSmallSize=$2
	[[ ! -f $fileName ]] && echo "$fileName Not Found" && exit 1
	if ! echo $fileSmallSize | egrep '^[[:digit:]]+$' &> /dev/null;then
		echo "fileSmallSize  Must Number" && exit 1
	fi
	local fileSize=$(du -s $fileName |awk '{print $1}')
	if [[ $fileSize -gt $fileSmallSize ]];then
		#清空fileName
		> $fileName && exit 1
	fi
}
#调用方法清理文件即可,文件大于100M就清理
CheckFileSize /home/test/data/ 102400

4、tomcat日志文件清理

tomcat安装完了之后,在/home/vlog/apache-tomcat-9.0.53/logs路径下会自动产生一些日志文件,这些日志文件是以txt和log结尾的日志文件,需要进行清理,只保留最近几天的就行。

#!/bin/sh
currDate=`date +%Y-%m-%d`
currDate8=${currDate//-/}
##!@NOTE:tomcat日志文件清理
##!@IN: 1 -> 需要删除的源文件路径
##!@IN: 2 -> 保留天数
##!@SAMPLE: fClearTomcatLog sourceDir saveDays
function fClearTomcatLog
{
	local sourceDir=$1
	local saveDays=$2
	fileFoldArr=`ls $sourceDir`
	for fileName in ${fileFoldArr[*]}
	do
		if [ "${fileName##*.}"x == "log"x ]||[ "${fileName##*.}"x == "txt"x ];then
			dateCompare=`date -d "$currDate8 - $saveDays day" + %Y%m%d`
			#文件是形如: axcd_2023
			fileName10=${fileName:0-14:10}
			if [[ ${fileName10//-/} -eq $dateCompare ]];then
				rm -rf $sourceDir/$fileName 
			fi 
		fi	
   done		
}
#调用方法清理文件即可,保留30天
fClearTomcatLog /home/test/data  30

感谢大家的阅读,有更好的或者其他的实现方式,欢迎大家留言交流,谢谢。