次のコマンドでタイムスタンプに基づいてファイル名を取得するにはどうすればよいですか?
$ grep "exit 0" a*
a1.txt:+ exit 0
a2.txt:+ exit 0
a3.txt:+ exit 0
a4.txt:+ exit 0
a5.txt:+ exit 0
$ ls -latr
-rw-r--r-- 1 user grp 83046 Oct 27 06:46 a5.txt
-rw-r--r-- 1 user grp 68108 Oct 27 07:59 a1.txt
-rw-r--r-- 1 user grp 159792 Oct 27 12:35 a2.txt
-rw-r--r-- 1 user grp 225703 Oct 27 16:41 a3.txt
-rw-r--r-- 1 user grp 246782 Oct 27 20:17 a4.txt
上記の出力が示すように、ファイルが生成されたときのタイムスタンプに基づいて出力を取得できません。これを達成する方法はありますか?
答え1
ファイル名にスペース、タブ、改行($IFS
変更されていない)、、、文字、または呼び出しが含まれていない場合は、次の操作?
を*
行う必要があります。[
-
grep -- "exit 0" $(ls -tr a*)
$()
これをコマンド置換と呼びます。シェルが最初に実行され、次に出力ls -tr
を分割+グローブして、コマンドに渡されるファイルのリストを形成しますgrep
。
答え2
シェルを使用すると、zsh
次のようにglobの順序に影響を与えることができます。グローバル予選。
grep 'exit 0' a*(.Om)
Om
時間を修正して順序を逆にすることです。 .⃞のみを選択したい場合は、.⃞も追加しました。定期的なファイル(いいえ目次または管路または装備またはシンボリックリンク...).
答え3
ありがとうございます。次の方法でもこれを達成できました。もちろん、ursが最も簡単です。ありがとう
grep -H "exit 0" /opt/ctmagent/ctm/sysout_archives/141027/d_dms_btch_alrt_ifm_scp_ksh* | awk -F":" '{system("ls -latr "$1"")}'