Linux find命令结合Atime Mtime Ctime 时间删除指定时间日志

工作中遇到了生产系统中相关日志太多,占据大量磁盘空间,所以准备写一个crontab任务进行定期删除日志,只保留近五天的log信息。

Linux系统中文件存在三种时间属性,分别是:

Atime Mtime Ctime

三种时间分别是访问时间,修改时间,状态时间;

访问时间:对文件进行一次读操作,它的访问时间就会改变。例如像:cat、more等操作,但是state还有ls命令对atime是不会有影响的

修改时间:文件的内容被最后一次修改的时间,我们经常用的ls -l命令显示出来的文件时间就是这个时间,当用vim对文件进行编辑之后保存,它的mtime就会相应的改变

状态时间:当文件的状态被改变的时候,状态时间就会随之改变,例如当使用chmod、chown等改变文件属性的操作是会改变文件的ctime的。

此处需要记住一个命令:stat,查看文件或者文件系统的状态 ,可以查看时间等属性

当然,既然可以查看当前的atime、mtime、ctime,那肯定也可以查看几天前或者几天之内被改过或者访问过的文件。

Linux提供了一个简便的查询方式,那就是 +n 和 -n。以 -mtime 举例说明:

  -mtime n : n为数字,意思为在n天之前的一天之内被更改过内容的文件

  -mtime +n : 列出在n天之前(不含n天本身)被更改过内容的文件名

  -mtime -n : 列出在n天之内(含n天本身)被更改过内容的文件名

找 “5天之内被更改过的档案名” 就是   find / -mtime -5 ,找“5天前的那一天被更改过的档案名” 就是   find / -mtime 5 ,找“5天之前被更改过的档案名” 就是   find / -mtime +5。我们可以看出有没有 “+,-”的差别是很大的。下面用图来说明一下:

    由这个时光轴我们可以知道,最右边为当前时,+5 代表大于等于 6 天前的档案名, -5 代表小于等于 5 天内的档案名,5 则是代表 5-6 那一天的档案名。

所以在日志目录中保留最近五天的文件,五天前前的文件自动删除。

    find  /opt/app/log  -mtime  +5 -type  f  -name  *.[12]log  -exec  rm  -rf  {} \;
     /email/v1_bak --设置查找的目录;
     -mtime +5           --设置时间为91天前;
     -type f                 --设置查找的类型为文件;
     -name *.[12]log   --设置文件名称中包含1log或者2log
     -exec rm -f          --查找完毕后执行删除操作;

将此命令写入crontab后即可自动完成查找并删除的工作了。

或者用:find . -mtime +5 -type f | xargs rm -rf

1、编写清理日志脚本clearlogbefore5days.sh

   #!/bin/sh
   find   /opt/log  -mtime +5  -name "*.log" -exec rm {} \;

2、给脚本授权

    chmod  +x  clearlogbefore5days.sh

3、加入定时执行任务

    crontab -e

    在最后加入:00 2 * * *  root   /home/slynux/clearlogbefore5days.sh

 

原文地址:https://www.cnblogs.com/liujiarui/p/11871430.html