web-dev-qa-db-ja.com

"grep -l"の出力を最新の最終更新日で時間順に並べ替える方法は?

一致するファイル名を出力するために、grepで-lフラグを使用しています。

次に、結果(ファイル)を昇順でリストします(つまり、最後が最新です)。

明らかに

grep -l <pattern> *.txt | ls -rt

ls -lrtallファイルを出力するだけなので、必要なものではありません。

27
Pyderman

試してください:

ls -rt *.txt | xargs grep -l <pattern>

最初にlsを使用して*.txtファイルを一覧表示し、変更時間(最新の最新)で並べ替えます。次に、エントリごとにgrepを実行して、次を含むファイルのみを出力しますパターン。

46
Shawn Chin

私はこれが古い質問であることを知っていますが、同じことを探している誰かに私の提案を追加することを考えました。

for i in $(ls -rt *.txt); do grep <pattern> $i; done

1
NIK

ここに別の方法があります

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
0