问题:
今天公司有个问题,关于Linux存储占满,及时清理拷贝文件的小事
目录:/mnt/dbbak4jc
存在:大量每天拷贝的数据库目录文件,是以yyyyMMdd的时间格式命名;还有一些其它shell脚本,主要是做数据拷贝和打包拷贝文件zip到full目录下
需求:我希望写一个Linux脚本可以检查/mnt目录占满时自动删除这些拷贝文件,并只保留每个月的最大的日期文件”
我把需求发给chatgpt,并帮我谢了一个Bash脚本,虽然需求问题没有解决,但是那是我描述问题没有说全的原因,所以我觉得写的很好,让我觉得脚本也挺好写的。
提问:
现在在这个目录下/mnt/dbbak4jc有大量每天拷贝的数据库文件价,文件夹是以yyyyMMdd的时间命名的。我希望写一个Linux脚本可以检查/mnt目录占满时自动删除这些拷贝文件,并只保留每个月的最大的日期文件。
ChatGPT回答:
您可以编写一个 Bash 脚本来实现这个功能。以下是一个示例脚本,它会检查 /mnt
目录的占用空间,当占用空间超过阈值时,自动删除每个月中除最大日期文件夹之外的所有文件夹。
#!/bin/bash
# 设置阈值,假设为90%(可根据实际情况调整)
threshold=90
# 获取/mnt目录的占用空间百分比
current_usage=$(df /mnt | awk 'NR==2 {print $5}' | sed 's/%//')
# 如果当前占用空间超过阈值,则开始删除文件夹
if [ $current_usage -gt $threshold ]; then
echo "/mnt 目录占用空间超过 $threshold%,开始删除文件夹..."
# 备份文件夹的路径
backup_dir="/mnt/dbbak4jc"
# 获取每个月最大的日期文件夹
max_dates=$(ls $backup_dir | sort -r | grep -E '^[0-9]{8}$' | head -n 1)
# 删除每个月中除最大日期文件夹之外的所有文件夹
for date_folder in $(ls $backup_dir | sort -r | grep -E '^[0-9]{8}$'); do
if [ "$date_folder" != "$max_dates" ]; then
rm -rf "$backup_dir/$date_folder"
fi
done
echo "删除文件夹完成,保留了每个月最大的日期文件夹。"
else
echo "/mnt 目录占用空间未达到 $threshold%,无需删除文件夹。"
fi
请注意,这个脚本假设 /mnt
目录是你要监控的目录,并且 /mnt/dbbak4jc
是包含每天拷贝的数据库文件夹的路径。脚本会按照日期的方式(yyyyMMdd)对文件夹进行排序,并保留每个月中最大的日期文件夹,删除其他文件夹以释放空间。
在实际使用中,请确保正确设置 threshold
变量以符合您的需求,并注意备份文件夹路径是否正确。此外,对于自动删除文件夹这样的操作,请务必谨慎行事,以免误删重要数据。