ディレクトリ内の最新のファイルから文字列を検索する

ディレクトリ内の最新のファイルから文字列を検索する

grep現在のディレクトリの最新のファイルから文字列が必要です。次のコマンドを使用すると、最新のファイルを取得できますが、grepそのファイル内でのみ取得することはできません。

$ ls -lrth 

-rw-r--r--. 1 user pg_user 1712804 Jul 13 22:27 postgresql-2021-07-13_000000.log
-rw-r--r--. 1 user pg_user       0 Jul 14 00:00 postgresql-2021-07-14_000000.log

$ ls -lt postgresql-*.log | head -n 1 
-rw-r--r--. 1 user pg_user       0 Jul 14 00:00 postgresql-2021-07-14_000000.log

今私はgrep文字列が欲しいpostgresql-2021-07-14_000000.log

echo2つのコマンドを1つのコマンドにまとめて画面に出力するにはどうすればよいですか?それはまるで

$ls -lt postgresql-*.log | head -n 1 | grep "system is ready" 

(ここで何かが落ちたことを私だけが知っています。)

ベストアンサー1

zshシェルの使用:

grep -F 'system is ready' postgresql-*.log(.om[1])

パターンは、postgresql-*.log(.om[1])現在のディレクトリで選択されているファイルと一致する一般的なワイルドカードパターン()と、ワイルドpostgresql-*.logカードパターンの動作を変更するワイルドカード修飾子((.om[1]))で構成されています。ワイルドカード修飾子はzshシェルにのみ適用されます。

ここで使用されるglobbing修飾子は、通常のファイル(.)のみを照合し、一致によって生成された名前のリストが変更タイムスタンプom()でソートされることを保証します。次に、ソートされた一致リストからを使用して最初の一致のみを抽出し、最後に変更された[1]ワイルドカードパターンと一致するファイル名を指定します。

対話型シェルでない場合でも、次のことができますzshzsh

zsh -c 'grep -F "system is ready" postgresql-*.log(.om[1])'

あなたが尋ねた後スクリプトこれを行うには:

#!/bin/zsh

grep -F 'system is ready' postgresql-*.log(.om[1])

関連:

おすすめ記事