Bash
比較包含日期和時間的多個文件後綴並對最近的執行操作
我在遵循以下模式的目錄中有多個文件。
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
變數。