比较包含日期和时间的多个文件后缀并对最新的执行操作

比较包含日期和时间的多个文件后缀并对最新的执行操作

我的目录中有多个遵循以下模式的文件。

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)

相关内容