通常、ログを検索すると最近のイベントが見つかります。最後に、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
できます。zsh
setopt 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つの場合もあります)。ただし、ファンキーなファイル名は処理できます。