我的情况是,我们将日志文件保存在 /YEAR/MONTH/ 文件夹结构中,例如 /2018/03/fakelog.tmp.gz
我希望每月运行一个 cronjob 来删除超过一定年限的文件,而不是使用 find,我想可以利用这种结构来提高效率(使用 find -mtime 需要很多分钟才能运行)。
我确信获取当前日期并将年份减少 2 并删除所有内容 /2016/03/ 会很容易,但这样我们就会错过 /2014/ 或 /2016/01 中的任何内容,如果将脚本添加到不同的系统或由于任何原因未运行特定月份,这可能会引起问题。
例如,是否有可能找到任何“小于” 2016 的文件夹,或任何“小于” /2016/03 的文件夹?或者可以用另一种方式解决这个问题,而不涉及迭代每个组合。
谢谢你的帮助
答案1
我认为可以用如下简单的脚本来完成:
#!/bin/bash
start_year=2010
year=`date +%Y -d '-2 year'`
mon=`date +%m -d '-2 year'`
prev_year=`expr $year - 1`
if [ $start_year -gt $year ]; then
echo "Nothing to do"
exit 0
fi
for i in `seq $start_year $prev_year`; do
echo "Removing year [$i]"
done
for i in `seq 1 $mon`; do
m=$(printf '%02d' $i)
echo "Removing month [$year/$m]"
done
您需要设置起始年份,如“2010”,如上所示。在这里,脚本将仅显示要删除的文件夹。这样更安全,可以确保并确认您删除了真正需要的内容。如果满意,您只需添加即可rm -rf dir_name
。