在 Linux 中使用 Bash 脚本删除早于 “X” 天的文件/文件夹
创始人
2024-03-02 03:42:26
0

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

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

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

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

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

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

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

$ ls -lh /var/log/app/

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

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

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

# /opt/script/delete-old-folders.sh

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

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

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

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

# crontab -e

0 7 * * * /bin/bash /opt/script/delete-old-folders.sh

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

Application log folders are deleted  older than 20 days
+--------------------------------------------------------+
Oct 11 /var/log/app/app_log.11
Oct 12 /var/log/app/app_log.12
Oct 13 /var/log/app/app_log.13
Oct 14 /var/log/app/app_log.14
Oct 15 /var/log/app/app_log.15

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

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

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

# ls -lh /var/log/apache/

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

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

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

# /opt/script/delete-old-files.sh

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

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

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

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

# crontab -e

0 7 * * * /bin/bash /opt/script/delete-old-folders.sh

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

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

via: https://www.2daygeek.com/bash-script-to-delete-files-folders-older-than-x-days-in-linux/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

开源启动盘制作工具Vent...
IT之家 7 月 25 日消息,科技媒体 Neowin 昨日(7 ...
2026-07-26 18:17:15
一个周末,AI黑掉了AI!...
新智元报道 AI竟黑了AI! 这几天,全球最大AI开源平台Hug...
2026-07-20 16:08:43
他做了个开源工具,却收到4...
当一个独立开发者在业余时间写了个小工具,本来只是想“帮大家省点事”...
2026-03-02 16:50:44
《原神》隐私政策删除语音用...
IT之家 2 月 26 日消息,据 Eurogamer 报道,《原...
2026-02-26 14:21:22
u盘里的东西不小心删除了怎...
今天使用时发现u盘里的文件消失了。u盘里的东西不小心删除了怎么找回...
2026-02-02 20:18:45
观测云产品更新 | 应用性...
观测云更新 监控 面向海外站点,新增 Google Chat 为...
2026-01-28 17:48:25

热门资讯

“Linux 中国” 开源社区... 这是一个艰难的决定 —— 这不是调侃,而是当你真正做出改变了你十几年生活轨迹的决定时,你就会明白这个...
硬核观察 #1263 德国铁路... #1 德国铁路公司招聘 Windows for Workgroups 3.11 管理员该职位要求了解...
人工智能教程(七):Sciki... 在本系列的 上一篇文章 中,我们用 TensorFlow 构建了第一个神经网络,然后还通过 Kera...
关闭 WSL 中正在运行的 L... 以下是使用 WSL 关闭在 Windows 内运行的 Linux 系统的不同方法。你使用 WSL 在...
MX Linux 23.2 “... 最新的 MX Linux 23.2 小版本更新带来了基本的改进和新增功能。MX Linux 推出了 ...
硬核观察 #1262 网络上最... #1 网络上最古老的软件存档库之一即将关闭美国新墨西哥州立大学(NMSU)最近宣布,即将于 2024...
如何在 RHEL 上通过绑定配... 在 Linux 中,你可以根据自己的需要创建高级网络设置,如 网络绑定 Network Bondin...
Linux Matrix 消息... Matrix 用户可以升级 Fractal 6 了!Fractal 是目前 最好的 Matrix 客...
如何通过 VLC 使用字幕 使用 VLC 媒体播放器播放和管理字幕的新手指南。我是一个超级动漫迷,如果你想观看最新的剧集,那么你...
硬核观察 #1261 X 计划... #1 X 计划在奥斯汀建立内容审核总部据报道,该部门将招聘 100 名全职员工,将主要关注 CSE ...