使用文件名中的日期格式删除早于 X 天的文件

Removing files older than X days using a date format in the filename

我有一个包含日志文件的目录,文件名中包含以下日期格式 (YYYY-MM-DD)。

app-2020-12-17.log.2
app-2020-12-18.log.1
app-2020-12-18.log.2
app-2020-12-18.log.31
app-2020-12-18.log.32
app-2020-12-18.log.33
app-2020-12-18.log.3.gz
app-2020-12-20.log.4.gz
app-2020-12-20.log.5

我的目标是删除所有早于 X 日期的文件(使用文件名中的日期作为比较)。例如,我想删除所有早于 2020-12-20 的文件,那么在操作之后我的文件夹中应该会留下以下文件:

app-2020-12-20.log.4.gz
app-2020-12-20.log.5

我怎样才能实现这种行为?我试过使用这样的东西 find app*log* -maxdepth 1 -mtime +1,但这只能按修改日期查找文件,而不是我需要的方式。

使用 bash 和正则表达式:

for i in app-*.log*; do
  [[ "$i" =~ -([0-9]{4}-[0-9]{2}-[0-9]{2}) ]] \
    && [[ "${BASH_REMATCH[1]}" < "2020-12-20" ]] \
    && echo rm -v "$i"
done

${BASH_REMATCH[1]} 包含 2020-12-17,例如

作为一行:

for i in app-*.log*; do [[ "$i" =~ -([0-9]{4}-[0-9]{2}-[0-9]{2}) ]] && [[ "${BASH_REMATCH[1]}" < "2020-12-20" ]] && echo rm -v "$i"; done

输出:

rm -v app-2020-12-17.log.2
rm -v app-2020-12-18.log.1
rm -v app-2020-12-18.log.2
rm -v app-2020-12-18.log.31
rm -v app-2020-12-18.log.32
rm -v app-2020-12-18.log.33
rm -v app-2020-12-18.log.3.gz