Linux端末で特定の文字列を含むソートされたファイルのリストを表示する方法

Linux端末で特定の文字列を含むソートされたファイルのリストを表示する方法

異なるディレクトリに3つのフォルダがあり、そのうちのいくつかはより多くのサブフォルダを含み、各フォルダ/サブフォルダには文字列を含む名前などのtest1テキストファイルがあるとします。定義であってもよいし、そうであってもよい。test2test3hellohellohelloJASKFNASKFN

これらのファイルのソートされたリストを表示するにはどうすればよいですか?名前や変更された日付で並べ替えたいとしましょう。greporコマンドを使用してこれらのファイルを検索して表示できることはわかっていますが、ソートされたfind方法で表示する方法はわかりません。

ベストアンサー1

ファイルのリストを次に渡す前にソートする場合grep:

では、zsh次のことができます。

grep -le hello -- **/test<->(.)

hello隠しディレクトリをスキップし、名前の後に1つ以上の10進数(数字の範囲と一致するパターン形式)が続く現在の作業ディレクトリ内または下のファイルの内容を見つけます。test<-><x-y>

デフォルトでは、グローバル拡張は名前でソートされます。

編集時間に基づいてソートするには、代わりに(.om)を使用してください(.)。または(.oL)サイズ別。グローバル修飾子リストとinfo zsh qualifiers修飾子を並べ替える基準のリストについては、参考資料を参照してください。o

逆順oに置き換えます(名前順に逆順に並べ替え)。OOn

(.n)数値名で並べ替えるために使用されます(および間ではなくtest10)。test9test1test2

会ったらあまりにも議論するexecve()エラー(ほとんどのシステムでシステムコールの制限が原因で発生):

autoload -Uz zargs # best in ~/.zshrc
zargs -- **/test<->(.) -- grep -le hello --

GNUツールとすべてのシェルを使用する(コマンドを1行に入力する必要がある(t)cshを除く):

名前で分類する:

LC_ALL=C find . -regextype posix-extended -name '.?*' -prune -o \
  -regex '.*/test[0-9]+' -type f -print0 |
  sort -z |
  xargs -r0 grep -le hello --

(数値ソート-Vオプションを追加sort

編集時間で並べ替え:

LC_ALL=C find . -regextype posix-extended -name '.?*' -prune -o \
  -regex '.*/test[0-9]+' -type f -printf '%T@\t%p\0' |
  sort -zrn |
  cut -zf2- |
  xargs -r0 grep -le hello --

逆順-rで追加/削除してください。sort

おすすめ記事