Bash - 获取最近12小时的文件/复杂的名称格式

时间:2015-07-22 20:47:10

标签: linux bash shell awk scripting

我有一组日志,其名称如下:

  

SystemOut_15.07.20_23.00.00.log
SystemOut_15.07.21_10.27.17.log
  SystemOut_15.07.21_16.48.29.log
SystemOut_15.07.22_15.57.46.log
  SystemOut_15.07.22_13.03.46.log

从该列表中我只需要获取最近12个小时的文件。 所以作为输出我会收到:

  

SystemOut_15.07.22_15.57.46.log
SystemOut_15.07.22_13.03.46.log

我遇到类似问题的文件名称低于名称但能够快速解决,因为日期很简单:

  

servicemix.log.2015-07-21-11
servicemix.log.2015-07-22-12
  servicemix.log.2015-07-22-13

所以我创建了一个名为'day'的变量:

day=$(date -d '-12 hour' +%F-%H)

并使用以下命令获取过去12小时的文件:

ls | awk -F. -v x=$day '$3 >= x'

你能帮忙完成SystemOut文件,因为它们的名字语法包含下划线,这让我很困惑。

1 个答案:

答案 0 :(得分:2)

假设日志文件名称中的日期时间采用格式     YY.MM.DD_HH24.MI.SS,

day=$(date -d '-12 hour' +%Y.%m.%d_%H.%M.%S.log)

将世纪添加到日志文件名中的2位数年份,然后进行比较

ls | awk -F_ -v x=$day '"20"$2"_"$3 >= x'

或者,正如Ed Morton建议的那样,find可以像这样使用:

find . -type f -name '*.log' -cmin -720

这将返回最近720分钟内创建的日志文件。确切地说,这意味着文件状态在过去720分钟内最后一次更改。 -mmin选项可用于按修改时间进行搜索。