【问题标题】:Removing files older than X days using a date format in the filename [duplicate]使用文件名中的日期格式删除早于 X 天的文件 [重复]
【发布时间】:2020-12-20 18:03:51
【问题描述】:

我有一个包含日志文件的目录,文件名中包含以下日期格式 (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 shell unix sh


【解决方案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

【讨论】:

  • 对于新手来说太复杂了
  • 这很完美,正是我需要的方式,我学到了一些新东西,谢谢!
猜你喜欢
  • 2020-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多