最近のログファイルのエイリアス

最近のログファイルのエイリアス

通常、ログを検索すると最近のイベントが見つかります。最後に、bashプロンプトでTabキーを押して名前を完成させました。

最後に、日付算術を使用してファイル名を作成するbashエイリアスを作成しました。次のようなもの

grep <test> `date '+localhost_access_log.%C%y-%2m-%2d.txt' -d "-3 days"` grep 400 `date '+localhost_access_log.%C%y-%2m-%2d.txt' -d "-2 days"` grep 400 `date '+localhost_access_log.%C%y-%2m-%2d.txt' -d "-1 days"` grep 400 `date '+localhost_access_log.%C%y-%2m-%2d.txt' -d "-0 days"`

これを最適化する方法はありますか?理想的には、localhost_access_log.2019-06-24.txtやapi-2019-06-24-1.logなどの3つの最新ファイルをgrepするために複数のエイリアスを作成したいと思います。日付コマンドコード。本質的に、私が送信したパターンに基づいて、今日のログファイルを含む4つの最新のファイル名を返し、grepコマンドに渡すことができるbash機能のヘルプを探しています。

答え1

こだわらない場合は、次のように簡単にこれを実行bashできます。zshsetopt extendedglob

grep <test> *(ND.om[1,4])

現在のディレクトリの4つの最新ファイルを検索します。

説明する:

  • N- 「null glob」をオンにします(globパターンが一致しない場合は自動的にすべてを置き換えます)。
  • D- 「GLOB_DOTS」を開く(「隠しファイル」とも一致)
  • .- 一般的なファイルの一致
  • om- 修正時間でソート
  • [1-4]- 配列添え字

純粋なbashソリューションは次のとおりです。

grep test $(ls -1rt | tail -n 4)

(ただし、スペースを含むファイル名などの奇妙なファイル名では失敗します。)

find . -maxdepth 1 -type f -name "pattern" -mtime -1 -exec grep test {} +

pattern現在のディレクトリで、最後の日に変更された名前と一致するファイルを検索します(4つ以上の場合がありますが、0つの場合もあります)。ただし、ファンキーなファイル名は処理できます。

答え2

これはbashシンプルさに基づくソリューションです。ls各ログファイルが特定の日付のものであると仮定し、指定されたワイルドカードに一致するN個の最新のファイルを一覧表示するように機能します。

$ grep test $(ls -tr localhost_access_log.*.txt | tail -4)

これがls出力を解析するのに賢明ではない場合と見なされる場合は、代わりに次のようにします。

$ grep test $(find . -name localhost_access_log.\*.txt -mtime -3d)

一般に、ポイントは日付の計算に問題が発生しないようにすることです。grepN個の最新ファイルを実行するだけです。繰り返しますが、あなたの質問からわかるように、これはログが毎日交換されると仮定します。

関連情報