私のディレクトリには、次のパターンに従う複数のファイルがあります。
logA.log.$todayDate.$timeCreated
logA.log.07222020.084355
比較したい$time生成されました今日作成したディレクトリのすべてのファイルの一部を使用して最新バージョンのログファイルをインポートし、そのファイルを取得して操作を実行します。
私ができる最良の方法を知っている人はいますか?
答え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)