/YEAR/MONTH 文件夹结构中的日志文件,如何正确删除旧日志?

/YEAR/MONTH 文件夹结构中的日志文件,如何正确删除旧日志?

我的情况是,我们将日志文件保存在 /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

相关内容