一致するファイル名を出力するために、grepで-lフラグを使用しています。
次に、結果(ファイル)を昇順でリストします(つまり、最後が最新です)。
明らかに
grep -l <pattern> *.txt | ls -rt
ls -lrtはallファイルを出力するだけなので、必要なものではありません。
試してください:
ls -rt *.txt | xargs grep -l <pattern>
最初にls
を使用して*.txt
ファイルを一覧表示し、変更時間(最新の最新)で並べ替えます。次に、エントリごとにgrep
を実行して、次を含むファイルのみを出力しますパターン。
私はこれが古い質問であることを知っていますが、同じことを探している誰かに私の提案を追加することを考えました。
for i in $(ls -rt *.txt); do grep <pattern> $i; done
ここに別の方法があります
grep -l <pattern> *.txt | xargs ls -ltr --time-style="+%Y%m%d_%H%M"
例えば
$ grep -l argparse * | xargs ls -ltr --time-style="+%Y%m%d_%H%M"
-rwxr-xr-x 1 raju 197121 979 20171030_2323 list_dep.py
-rwxr-xr-x 1 raju 197121 14329 20180129_2216 grep_installed.py
-rwxr-xr-x 1 raju 197121 7517 20180129_2216 popsort.py
タイムスタンプなどなしでファイルを一覧表示するには、
grep -l <pattern> * | xargs ls -1tr
例えば
$ grep -l argparse * | xargs ls -1tr
list_dep.py
grep_installed.py
popsort.py