異なるディレクトリに3つのフォルダがあり、そのうちのいくつかはより多くのサブフォルダを含み、各フォルダ/サブフォルダには文字列を含む名前などのtest1
テキストファイルがあるとします。定義であってもよいし、そうであってもよい。test2
test3
hello
hello
helloJASKFNASKFN
これらのファイルのソートされたリストを表示するにはどうすればよいですか?名前や変更された日付で並べ替えたいとしましょう。grep
orコマンドを使用してこれらのファイルを検索して表示できることはわかっていますが、ソートされたfind
方法で表示する方法はわかりません。
答え1
ファイルのリストを次に渡す前にソートする場合grep
:
では、zsh
次のことができます。
grep -le hello -- **/test<->(.)
hello
隠しディレクトリをスキップし、名前の後に1つ以上の10進数(数字の範囲と一致するパターン形式)が続く現在の作業ディレクトリ内または下のファイルの内容を見つけます。test
<->
<x-y>
デフォルトでは、グローバル拡張は名前でソートされます。
編集時間に基づいてソートするには、代わりに(.om)
を使用してください(.)
。または(.oL)
サイズ別。グローバル修飾子リストとinfo zsh qualifiers
修飾子を並べ替える基準のリストについては、参考資料を参照してください。o
逆順o
に置き換えます(名前順に逆順に並べ替え)。O
On
(.n)
数値名で並べ替えるために使用されます(および間ではなくtest10
)。test9
test1
test2
会ったらあまりにも議論する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