使用shell删除某目录下指定时间长度之前的文件

2 篇文章 0 订阅

    工作中服务器所有服务都会一个小时生成一个日志文件,从而导致磁盘越来越大,所以需要定期清理文件。但是又不能一次性全部删除,所以写了这么个脚本,用于删除制定目录下两个星期以前生成的日志文件。

#!/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开始计算至今的秒数,

    下面总结一下在实现这个脚本时自己所查找的知识点:

  1. ls -l的参数--time-style,用于设置显示文件的时间的格式,是在man ls时找到的,除了一些提供的格式如full-iso、iso外,我们也可以设置成我们需要的格式,和date所支持的格式是一样的。注意一定要跟在-l参数后面。
  2. 给awk指令传入某些参数,直接在awk的执行代码后面加入需要设置的参数名称并对其设置值即可。awk '{xxx}' yy=123,在awk中直接使用变量名获取变量值即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值