在Linux中使用Bash脚本删除早于 “X” 天的文件/文件夹

系统 Linux
磁盘使用率 监控工具能够在达到给定阈值时提醒我们。但它们无法自行解决 磁盘使用率 问题。需要手动干预才能解决该问题。如果你想完全自动化此类操作,你会做什么。是的,可以使用 bash 脚本来完成。

[[279884]]

磁盘使用率 监控工具能够在达到给定阈值时提醒我们。但它们无法自行解决 磁盘使用率 问题。需要手动干预才能解决该问题。

如果你想完全自动化此类操作,你会做什么。是的,可以使用 bash 脚本来完成。

该脚本可防止来自 监控工具 的警报,因为我们会在填满磁盘空间之前删除旧的日志文件。

我们过去做了很多 shell 脚本。如果要查看,请进入下面的链接。

我在本文中添加了两个 bash 脚本,它们有助于清除旧日志。

1)在 Linux 中删除早于 “X” 天的文件夹的 Bash 脚本

我们有一个名为 /var/log/app/ 的文件夹,其中包含 15 天的日志,我们将删除早于 10 天的文件夹。

  1. $ ls -lh /var/log/app/
  2.  
  3. drwxrw-rw- 3 root root 24K Oct 1 23:52 app_log.01
  4. drwxrw-rw- 3 root root 24K Oct 2 23:52 app_log.02
  5. drwxrw-rw- 3 root root 24K Oct 3 23:52 app_log.03
  6. drwxrw-rw- 3 root root 24K Oct 4 23:52 app_log.04
  7. drwxrw-rw- 3 root root 24K Oct 5 23:52 app_log.05
  8. drwxrw-rw- 3 root root 24K Oct 6 23:54 app_log.06
  9. drwxrw-rw- 3 root root 24K Oct 7 23:53 app_log.07
  10. drwxrw-rw- 3 root root 24K Oct 8 23:51 app_log.08
  11. drwxrw-rw- 3 root root 24K Oct 9 23:52 app_log.09
  12. drwxrw-rw- 3 root root 24K Oct 10 23:52 app_log.10
  13. drwxrw-rw- 3 root root 24K Oct 11 23:52 app_log.11
  14. drwxrw-rw- 3 root root 24K Oct 12 23:52 app_log.12
  15. drwxrw-rw- 3 root root 24K Oct 13 23:52 app_log.13
  16. drwxrw-rw- 3 root root 24K Oct 14 23:52 app_log.14
  17. drwxrw-rw- 3 root root 24K Oct 15 23:52 app_log.15

该脚本将删除早于 10 天的文件夹,并通过邮件发送文件夹列表。

你可以根据需要修改 -mtime X 的值。另外,请替换你的电子邮箱,而不是用我们的。

  1. # /opt/script/delete-old-folders.sh
  2.  
  3. #!/bin/bash
  4. prev_count=0
  5. fpath=/var/log/app/app_log.*
  6. find $fpath -type d -mtime +10 -exec ls -ltrh {} \; > /tmp/folder.out
  7. find $fpath -type d -mtime +10 -exec rm -rf {} \;
  8. count=$(cat /tmp/folder.out | wc -l)
  9. if [ "$prev_count" -lt "$count" ] ; then
  10. MESSAGE="/tmp/file1.out"
  11. TO="[email protected]"
  12. echo "Application log folders are deleted older than 15 days" >> $MESSAGE
  13. echo "+----------------------------------------------------+" >> $MESSAGE
  14. echo "" >> $MESSAGE
  15. cat /tmp/folder.out | awk '{print $6,$7,$9}' >> $MESSAGE
  16. echo "" >> $MESSAGE
  17. SUBJECT="WARNING: Apache log files are deleted older than 15 days $(date)"
  18. mail -s "$SUBJECT" "$TO" < $MESSAGE
  19. rm $MESSAGE /tmp/folder.out
  20. fi

delete-old-folders.sh 设置可执行权限。

  1. # chmod +x /opt/script/delete-old-folders.sh

最后添加一个 cronjob 自动化此任务。它于每天早上 7 点运行。

  1. # crontab -e
  2.  
  3. 0 7 * * * /bin/bash /opt/script/delete-old-folders.sh

你将看到类似下面的输出。

  1. Application log folders are deleted older than 20 days
  2. +--------------------------------------------------------+
  3. Oct 11 /var/log/app/app_log.11
  4. Oct 12 /var/log/app/app_log.12
  5. Oct 13 /var/log/app/app_log.13
  6. Oct 14 /var/log/app/app_log.14
  7. Oct 15 /var/log/app/app_log.15

2)在 Linux 中删除早于 “X” 天的文件的 Bash 脚本

我们有一个名为 /var/log/apache/ 的文件夹,其中包含15天的日志,我们将删除 10 天前的文件。

以下文章与该主题相关,因此你可能有兴趣阅读。

  1. # ls -lh /var/log/apache/
  2.  
  3. -rw-rw-rw- 3 root root 24K Oct 1 23:52 2daygeek_access.01
  4. -rw-rw-rw- 3 root root 24K Oct 2 23:52 2daygeek_access.02
  5. -rw-rw-rw- 3 root root 24K Oct 3 23:52 2daygeek_access.03
  6. -rw-rw-rw- 3 root root 24K Oct 4 23:52 2daygeek_access.04
  7. -rw-rw-rw- 3 root root 24K Oct 5 23:52 2daygeek_access.05
  8. -rw-rw-rw- 3 root root 24K Oct 6 23:54 2daygeek_access.06
  9. -rw-rw-rw- 3 root root 24K Oct 7 23:53 2daygeek_access.07
  10. -rw-rw-rw- 3 root root 24K Oct 8 23:51 2daygeek_access.08
  11. -rw-rw-rw- 3 root root 24K Oct 9 23:52 2daygeek_access.09
  12. -rw-rw-rw- 3 root root 24K Oct 10 23:52 2daygeek_access.10
  13. -rw-rw-rw- 3 root root 24K Oct 11 23:52 2daygeek_access.11
  14. -rw-rw-rw- 3 root root 24K Oct 12 23:52 2daygeek_access.12
  15. -rw-rw-rw- 3 root root 24K Oct 13 23:52 2daygeek_access.13
  16. -rw-rw-rw- 3 root root 24K Oct 14 23:52 2daygeek_access.14
  17. -rw-rw-rw- 3 root root 24K Oct 15 23:52 2daygeek_access.15

该脚本将删除 10 天前的文件并通过邮件发送文件夹列表。

你可以根据需要修改 -mtime X 的值。另外,请替换你的电子邮箱,而不是用我们的。

  1. # /opt/script/delete-old-files.sh
  2.  
  3. #!/bin/bash
  4. prev_count=0
  5. fpath=/var/log/apache/2daygeek_access.*
  6. find $fpath -type f -mtime +15 -exec ls -ltrd {} \; > /tmp/file.out
  7. find $fpath -type f -mtime +15 -exec rm -rf {} \;
  8. count=$(cat /tmp/file.out | wc -l)
  9. if [ "$prev_count" -lt "$count" ] ; then
  10. MESSAGE="/tmp/file1.out"
  11. TO="[email protected]"
  12. echo "Apache Access log files are deleted older than 20 days" >> $MESSAGE
  13. echo "+--------------------------------------------- +" >> $MESSAGE
  14. echo "" >> $MESSAGE
  15. cat /tmp/file.out | awk '{print $6,$7,$9}' >> $MESSAGE
  16. echo "" >> $MESSAGE
  17. SUBJECT="WARNING: Apache log folders are deleted older than 15 days $(date)"
  18. mail -s "$SUBJECT" "$TO" < $MESSAGE
  19. rm $MESSAGE /tmp/file.out
  20. fi

delete-old-files.sh 设置可执行权限。

  1. # chmod +x /opt/script/delete-old-files.sh

最后添加一个 cronjob 自动化此任务。它于每天早上 7 点运行。

  1. # crontab -e
  2.  
  3. 0 7 * * * /bin/bash /opt/script/delete-old-folders.sh

你将看到类似下面的输出。

  1. Apache Access log files are deleted older than 20 days
  2. +--------------------------------------------------------+
  3. Oct 11 /var/log/apache/2daygeek_access.11
  4. Oct 12 /var/log/apache/2daygeek_access.12
  5. Oct 13 /var/log/apache/2daygeek_access.13
  6. Oct 14 /var/log/apache/2daygeek_access.14
  7. Oct 15 /var/log/apache/2daygeek_access.15

 

责任编辑:庞桂玉 来源: Linux中国
相关推荐

2015-06-02 14:43:43

shell运维

2020-05-09 16:25:31

Ubuntu文件夹桌面

2021-08-16 13:34:07

Linux终端删除文件

2023-05-13 17:43:17

Linux文件文件夹

2020-10-13 19:04:58

Bash信号捕获Shell脚本

2017-03-09 14:42:21

LinuxsFTP上传下载

2021-12-17 08:30:15

croc命令Linux文件夹

2021-12-17 07:00:56

Linux系统命令

2020-11-28 19:37:03

MeldLinuxdiff命令

2022-07-08 15:09:26

Linux

2009-12-03 10:18:32

Linux文件夹执行权限

2012-05-23 16:50:27

ASP.NET

2019-01-03 15:20:36

dbxfsLinux文件夹

2013-05-28 10:17:02

Windows.old故障恢复

2009-12-14 13:33:31

linuxramdisk文件系统

2017-05-03 15:30:38

LinuxMeld比较文件夹

2022-03-30 09:32:32

BashtestLinux

2022-11-10 08:15:55

PSCPWindowsLinux

2022-11-28 11:37:55

2022-01-01 19:00:17

LinuxLinux命令文件夹
点赞
收藏

51CTO技术栈公众号