我的目录中有多个遵循以下模式的文件。
logA.log.$todayDate.$timeCreated
logA.log.07222020.084355
我想比较一下$timeCreated今天创建的目录中所有文件的一部分,以获取日志文件的最新版本,然后在获取该文件后对其执行操作。
有谁知道我可以做到这一点的最佳方法?
答案1
你可以这样做:
set -- logA.log."$(date +%m%d%Y)".*
eval "latest=\${$#}"
(或者shift "$(($# - 1))"; latest=$1
如果您在宗教上反对使用eval
,尽管该特定使用eval
是完全安全的)。
由于全局扩展是按词法排序的,因此根据您的HHMMSS
格式,该列表中的最后一个将是最新的。
和zsh
:
(){latest=$argv[-1];} logA.log.${(%):-%D{%m%d%Y}}.*
或者:
(){latest=$1;} logA.log.${(%):-%D{%m%d%Y}}.*([-1])
${(%):-%D{%m%d%Y}}
使用%
参数扩展标志来扩展%D{%m%d%Y}
作为提示扩展。当然,您可以将其替换为"$(date +%m%d%Y)"
使其更清晰,尽管这将涉及分叉额外的进程并执行单独的实用程序。
或者,您可以使用zsh
的内置strftime
命令(在zsh/datetime
模块中)用该时间戳strftime -s today %m%d%Y
填充$today
变量。
答案2
some_command_that_takes_this_file_as_argument $(find . -iname "logA.log.$(date +%m%d%Y).[0-9]*" 2> /dev/null | sort -n | tail -1)
应该能解决问题
编辑:如果您只想使用最新的日志文件,您可以使其变得更加简单:some_command_that_takes_this_file_as_argument $(ls -rt | grep ^logA.log. | tail -1)