工作中服务器所有服务都会一个小时生成一个日志文件,从而导致磁盘越来越大,所以需要定期清理文件。但是又不能一次性全部删除,所以写了这么个脚本,用于删除制定目录下两个星期以前生成的日志文件。
#!/bin/bash
# 两个星期的总秒数
sec_diff_max=1209600
# 删除两个星期前产生的log文件
rm_old_log()
{
now=`date "+%s"`
ls -l --time-style '+%s' | awk '{
if(NR>1 && now-$6>sec_diff_max) {
cmd="rm "$7;
system(cmd);
}
}' now="$now" sec_diff_max="$sec_diff_max"
}
if [ -z $1 ]; then
echo "need one argument for log direction!"
else
if [ ! -d $1 ]; then
echo "log direction doesn't exist!"
else
cd $1
rm_old_log
fi
fi
运行脚本时需要传入日志所在的目录。脚本的工作内容就是ls指定目录下的文件,获取每个文件的修改时间,然后在获取当前时间,再用awk逐个文件比较两个时间差,删除时间差大于两个星期的文件。注意上面所用到的时间都是秒数格式,是从1970.1.1开始计算至今的秒数,
下面总结一下在实现这个脚本时自己所查找的知识点:
- ls -l的参数--time-style,用于设置显示文件的时间的格式,是在man ls时找到的,除了一些提供的格式如full-iso、iso外,我们也可以设置成我们需要的格式,和date所支持的格式是一样的。注意一定要跟在-l参数后面。
- 给awk指令传入某些参数,直接在awk的执行代码后面加入需要设置的参数名称并对其设置值即可。awk '{xxx}' yy=123,在awk中直接使用变量名获取变量值即可。