本文将介绍使用调用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
感谢大家的阅读,有更好的或者其他的实现方式,欢迎大家留言交流,谢谢。