CentOS 7 只保留最近 N 天的日志文件

在 CentOS 7 系统中,对于某些服务的日志文件操作。例如,Apache、Nginx 等服务,只保留最近 N 天的日志文件。

创建测试环境


/root/nginx/logs目录下,创建 20 个日志文件,从2019-03-012019-03-20。并且,将系统日期修改为2019-03-20

  1. for time in {01..20}; do date -s "201903$time"; touch /root/nginx/logs/access_www_$(date +%F).log ; done
  2. [root@centos7 ~]# ls -l /root/nginx/logs/
  3. total 0
  4. -rw-r--r-- 1 root root 0 Mar 1 00:00 access_www_2019-03-01.log
  5. -rw-r--r-- 1 root root 0 Mar 2 00:00 access_www_2019-03-02.log
  6. -rw-r--r-- 1 root root 0 Mar 3 00:00 access_www_2019-03-03.log
  7. -rw-r--r-- 1 root root 0 Mar 4 00:00 access_www_2019-03-04.log
  8. -rw-r--r-- 1 root root 0 Mar 5 00:00 access_www_2019-03-05.log
  9. -rw-r--r-- 1 root root 0 Mar 6 00:00 access_www_2019-03-06.log
  10. -rw-r--r-- 1 root root 0 Mar 7 00:00 access_www_2019-03-07.log
  11. -rw-r--r-- 1 root root 0 Mar 8 00:00 access_www_2019-03-08.log
  12. -rw-r--r-- 1 root root 0 Mar 9 00:00 access_www_2019-03-09.log
  13. -rw-r--r-- 1 root root 0 Mar 10 00:00 access_www_2019-03-10.log
  14. -rw-r--r-- 1 root root 0 Mar 11 00:00 access_www_2019-03-11.log
  15. -rw-r--r-- 1 root root 0 Mar 12 00:00 access_www_2019-03-12.log
  16. -rw-r--r-- 1 root root 0 Mar 13 00:00 access_www_2019-03-13.log
  17. -rw-r--r-- 1 root root 0 Mar 14 00:00 access_www_2019-03-14.log
  18. -rw-r--r-- 1 root root 0 Mar 15 00:00 access_www_2019-03-15.log
  19. -rw-r--r-- 1 root root 0 Mar 16 00:00 access_www_2019-03-16.log
  20. -rw-r--r-- 1 root root 0 Mar 17 00:00 access_www_2019-03-17.log
  21. -rw-r--r-- 1 root root 0 Mar 18 00:00 access_www_2019-03-18.log
  22. -rw-r--r-- 1 root root 0 Mar 19 00:00 access_www_2019-03-19.log
  23. -rw-r--r-- 1 root root 0 Mar 20 00:00 access_www_2019-03-20.log
  24. [root@centos7 ~]# date -s "20190320"
  25. Wed Mar 20 00:00:00 CST 2019
  26. [root@centos7 ~]# date
  27. Wed Mar 20 00:00:03 CST 2019

实现目标,只保留最近 7 天的日志文件。

其中date -s "20190320"命令表示,临时修改系统时间为2019/03/20,重启系统后自动恢复为当前时间。

方法 1 :使用 find 命令


使用find命令,查找/root/nginx/logs/目录下 7 天之前的日志文件。

  • 参数 -type f 表示查找类型为文件。
  • 参数 -name "*.log" 表示查找文件名称以 .log 结尾的文件。
  • 参数 -mtime +7 表示查找文件的数据最后修改时间为 7 天前的。
  1. [root@centos7 ~]# find /root/nginx/logs/ -type f -name "*.log" -mtime +7 | xargs ls -l
  2. -rw-r--r-- 1 root root 0 Mar 1 00:00 /root/nginx/logs/access_www_2019-03-01.log
  3. -rw-r--r-- 1 root root 0 Mar 2 00:00 /root/nginx/logs/access_www_2019-03-02.log
  4. -rw-r--r-- 1 root root 0 Mar 3 00:00 /root/nginx/logs/access_www_2019-03-03.log
  5. -rw-r--r-- 1 root root 0 Mar 4 00:00 /root/nginx/logs/access_www_2019-03-04.log
  6. -rw-r--r-- 1 root root 0 Mar 5 00:00 /root/nginx/logs/access_www_2019-03-05.log
  7. -rw-r--r-- 1 root root 0 Mar 6 00:00 /root/nginx/logs/access_www_2019-03-06.log
  8. -rw-r--r-- 1 root root 0 Mar 7 00:00 /root/nginx/logs/access_www_2019-03-07.log
  9. -rw-r--r-- 1 root root 0 Mar 8 00:00 /root/nginx/logs/access_www_2019-03-08.log
  10. -rw-r--r-- 1 root root 0 Mar 9 00:00 /root/nginx/logs/access_www_2019-03-09.log
  11. -rw-r--r-- 1 root root 0 Mar 10 00:00 /root/nginx/logs/access_www_2019-03-10.log
  12. -rw-r--r-- 1 root root 0 Mar 11 00:00 /root/nginx/logs/access_www_2019-03-11.log
  13. -rw-r--r-- 1 root root 0 Mar 12 00:00 /root/nginx/logs/access_www_2019-03-12.log
  14. [root@centos7 ~]#

参数 -mtime 7 表示,查找文件的数据最后修改时间为第 7 天的。

  1. [root@centos7 ~]# find /root/nginx/logs/ -type f -name "*.log" -mtime 7 | xargs ls -l
  2. -rw-r--r-- 1 root root 0 Mar 13 00:00 /root/nginx/logs/access_www_2019-03-13.log

参数 -mtime -7 表示,查找文件的数据最后修改时间为最近 7 天的。

  1. [root@centos7 ~]# find /root/nginx/logs/ -type f -name "*.log" -mtime -7 | xargs ls -l
  2. -rw-r--r-- 1 root root 0 Mar 14 00:00 /root/nginx/logs/access_www_2019-03-14.log
  3. -rw-r--r-- 1 root root 0 Mar 15 00:00 /root/nginx/logs/access_www_2019-03-15.log
  4. -rw-r--r-- 1 root root 0 Mar 16 00:00 /root/nginx/logs/access_www_2019-03-16.log
  5. -rw-r--r-- 1 root root 0 Mar 17 00:00 /root/nginx/logs/access_www_2019-03-17.log
  6. -rw-r--r-- 1 root root 0 Mar 18 00:00 /root/nginx/logs/access_www_2019-03-18.log
  7. -rw-r--r-- 1 root root 0 Mar 19 00:00 /root/nginx/logs/access_www_2019-03-19.log
  8. -rw-r--r-- 1 root root 0 Mar 20 00:00 /root/nginx/logs/access_www_2019-03-20.log

如果想要删除日志文件,把ls -l替换为rm就可以了。例如,删除 7 天前的日志文件。

  1. find /root/nginx/logs/ -type f -name "*.log" -mtime +7 | xargs rm

方法 2 :使用 $()


  1. [root@centos7 ~]# ls -l $(find /root/nginx/logs/ -type f -name "*.log" -mtime +7)
  2. -rw-r--r-- 1 root root 0 Mar 1 00:00 /root/nginx/logs/access_www_2019-03-01.log
  3. -rw-r--r-- 1 root root 0 Mar 2 00:00 /root/nginx/logs/access_www_2019-03-02.log
  4. -rw-r--r-- 1 root root 0 Mar 3 00:00 /root/nginx/logs/access_www_2019-03-03.log
  5. -rw-r--r-- 1 root root 0 Mar 4 00:00 /root/nginx/logs/access_www_2019-03-04.log
  6. -rw-r--r-- 1 root root 0 Mar 5 00:00 /root/nginx/logs/access_www_2019-03-05.log
  7. -rw-r--r-- 1 root root 0 Mar 6 00:00 /root/nginx/logs/access_www_2019-03-06.log
  8. -rw-r--r-- 1 root root 0 Mar 7 00:00 /root/nginx/logs/access_www_2019-03-07.log
  9. -rw-r--r-- 1 root root 0 Mar 8 00:00 /root/nginx/logs/access_www_2019-03-08.log
  10. -rw-r--r-- 1 root root 0 Mar 9 00:00 /root/nginx/logs/access_www_2019-03-09.log
  11. -rw-r--r-- 1 root root 0 Mar 10 00:00 /root/nginx/logs/access_www_2019-03-10.log
  12. -rw-r--r-- 1 root root 0 Mar 11 00:00 /root/nginx/logs/access_www_2019-03-11.log
  13. -rw-r--r-- 1 root root 0 Mar 12 00:00 /root/nginx/logs/access_www_2019-03-12.log

方法 3 :使用 find 命令的 -exec 参数


  1. [root@centos7 ~]# find /root/nginx/logs/ -type f -name "*.log" -mtime +7 -exec ls -l {} \;
  2. -rw-r--r-- 1 root root 0 Mar 5 00:00 /root/nginx/logs/access_www_2019-03-05.log
  3. -rw-r--r-- 1 root root 0 Mar 8 00:00 /root/nginx/logs/access_www_2019-03-08.log
  4. -rw-r--r-- 1 root root 0 Mar 7 00:00 /root/nginx/logs/access_www_2019-03-07.log
  5. -rw-r--r-- 1 root root 0 Mar 12 00:00 /root/nginx/logs/access_www_2019-03-12.log
  6. -rw-r--r-- 1 root root 0 Mar 6 00:00 /root/nginx/logs/access_www_2019-03-06.log
  7. -rw-r--r-- 1 root root 0 Mar 3 00:00 /root/nginx/logs/access_www_2019-03-03.log
  8. -rw-r--r-- 1 root root 0 Mar 4 00:00 /root/nginx/logs/access_www_2019-03-04.log
  9. -rw-r--r-- 1 root root 0 Mar 9 00:00 /root/nginx/logs/access_www_2019-03-09.log
  10. -rw-r--r-- 1 root root 0 Mar 11 00:00 /root/nginx/logs/access_www_2019-03-11.log
  11. -rw-r--r-- 1 root root 0 Mar 2 00:00 /root/nginx/logs/access_www_2019-03-02.log
  12. -rw-r--r-- 1 root root 0 Mar 10 00:00 /root/nginx/logs/access_www_2019-03-10.log
  13. -rw-r--r-- 1 root root 0 Mar 1 00:00 /root/nginx/logs/access_www_2019-03-01.log

(完)