Bash

比較包含日期和時間的多個文件後綴並對最近的執行操作

  • July 22, 2020

我在遵循以下模式的目錄中有多個文件。

logA.log.$todayDate.$timeCreated
logA.log.07222020.084355

我想比較今天創建的目錄中所有文件的**$timeCreated**部分,以獲得最新版本的日誌文件,然後在獲得該文件後對該文件執行操作。

有誰知道我能做到這一點的最佳方法?

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)

你可以這樣做:

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變數。

引用自:https://unix.stackexchange.com/questions/599795