我有一组日志,其名称如下:
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文件,因为它们的名字语法包含下划线,这让我很困惑。
答案 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选项可用于按修改时间进行搜索。