晨光BT群里面有人问,就顺手写了一个
[bash]#!/bin/bash
echo 'Copyright 2010 By [email protected]'
echo 'ClearYour Logs By ihipop.gicp.net for lidaof'
############## SET THE LOGS PATH ###########
logspath=/root/
############################################
######### SET THE MAX NUM TO RESERVE #######
maxnum=2
############################################
######### SET THE HEADER OF LOGS ###########
header=help
############################################
deleteit(){
filetodelete=ls -t|grep ^$header |sed "1,${maxnum}d"
for ihipop in $filetodelete
do
echo deleteing $ihipop
rm -f $ihipop
done
}
cd $logspath
num=ls |grep -c ^$header
if [ "$num" -gt "$maxnum" ];then
echo the file number is $num and it is grater than $maxnum,Starting to detele.....
deleteit
echo all done
else
echo Nothing to do ~~~
fi
exit 0[/bash]
复制上面的代码,另存为为clear.sh
然后
[bash]
chmod +x clear.sh
[/bash]
小小解释一下,
logspath=/root/
定义日志或者备份目录
maxnum=2
定义超过多少个文件开始清理
header=help
定义日志或者备份文件前缀
一下是我的测试过程
首先,我随即创建5个文件,这些文件的时间都不一样,按照创建顺序有先后
[bash]
root@bbs:[/root]rm -f help*
root@bbs:[/root]touch helpdate +%H:%M:%S
root@bbs:[/root]touch helpdate +%H:%M:%S
root@bbs:[/root]touch helpdate +%H:%M:%S
root@bbs:[/root]touch helpdate +%H:%M:%S
root@bbs:[/root]touch helpdate +%H:%M:%S
root@bbs:[/root]ls -t|grep help
help23:02:50
help23:02:48
help23:02:47
help23:02:46
help23:02:44
root@bbs:[/root]./clear.sh
Copyright 2010 By [email protected]
ClearYour Logs By ihipop.gicp.net for lidaof
the file number is 5 and it is grater than 2,Starting to detele.....
deleteing help23:02:47
deleteing help23:02:46
deleteing help23:02:44
all done
root@bbs:[/root]ls -t|grep help
help23:02:50
help23:02:48
root@bbs:[/root]./clear.sh
Copyright 2010 By [email protected]
ClearYour Logs By ihipop.gicp.net for lidaof
Nothing to do ~~
[/bash]
脚本的大概原理就是ls -t列出文件然后按照时间“新->旧”排列,再用管道输送给SED裁减掉头$maxnum个文件名,然后,一个for循环搞定。
^_^
顺便附送一个每天凌晨3点运行的cron
[bash]0 3 * * * /path/of/the/shell/script
[/bash]
关于更加详细的cron解释
请移步这里linux 定时任务 crontab 详细解释!(更新文件解析)
更新CentOS 5/RHEL5上面的情况:
不知道为什么,在公司的CentOS上ls -t是乱的。
ls -t换成ls -ct才对
或者这样写
[bash]#!/bin/bash
echo 'Copyright 2010 By [email protected]'
echo 'ClearYour Logs By ihipop.info'
############## SET THE LOGS PATH ###########
logspath=/root/
############################################
######### SET THE MAX NUM TO RESERVE #######
maxnum=2
############################################
######### SET THE HEADER OF LOGS ###########
header=help
############################################
deleteit(){
maxnum=$(($1-$maxnum))
filetodelete=ls|grep ^$header |head -n${maxnum}
for ihipop in $filetodelete
do
echo deleteing $ihipop
rm -f $ihipop
done
}
cd $logspath
num=ls |grep -c ^$header
if [ "$num" -gt "$maxnum" ];then
echo the file number is $num and it is grater than $maxnum,Starting to detele.....
deleteit $num
echo all done
else
echo Nothing to do ~~~
fi
exit 0[/bash]