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

Bash - Get files for last 12 hours / sophisticated name format

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

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 ' >= x'

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

假设日志文件名中的日期时间格式为 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""_" >= x'

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

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

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