日付と時刻を含む複数のファイルサフィックスを比較し、最新のサフィックスに対して操作を実行します。

日付と時刻を含む複数のファイルサフィックスを比較し、最新のサフィックスに対して操作を実行します。

私のディレクトリには、次のパターンに従う複数のファイルがあります。

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

比較したい$time生成されました今日作成したディレクトリのすべてのファイルの一部を使用して最新バージョンのログファイルをインポートし、そのファイルを取得して操作を実行します。

私ができる最良の方法を知っている人はいますか?

答え1

次のことができます。

set -- logA.log."$(date +%m%d%Y)".*
eval "latest=\${$#}"

(または、特定の使用が完全に安全であってもshift "$(($# - 1))"; latest=$1使用に対する宗教的反対がある場合)。evaleval

グローバル拡張は語彙的にソートされるため、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組み込まれているコマンドを使用して、対応するタイムスタンプで変数を埋めることもできます。strftimezsh/datetimestrftime -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)

関連情報