grep -ril、最上位ディレクトリを一度だけ表示

grep -ril、最上位ディレクトリを一度だけ表示

grep -rilだからフォルダにしたいです。一致する親フォルダだけを返したいです。

表示するには:

/tmp/: grep -ril "hello"

返品:

tmp1/banan/file
tmp1/banan2/file
tmp2/ape/file
tmp2/ape2/file

予想される結果:

tmp1
tmp2

ベストアンサー1

最初のレベルのディレクトリのみを印刷したい場合は、そのディレクトリで最初の一致を見つけてすぐに終了する方が効率的です。これを達成するためにこれを使用できます-q。成功すると一致を返し、そうでなければ失敗し、それを-r組み合わせると一致が見つかるとすぐに終了します。

for d in */; do grep -qri "hello" -- "$d" && printf "%s\n" "$d"; done

--オプションの終わりを示すために使用されるので、以下は指定されたディレクトリを保護し、オプション-somethingとして解釈できるファイル引数です。

for上記をで始まるディレクトリと一致させるには、.設定を検討してくださいshopt -s dotglobこれ

/出力から末尾を削除する必要がある場合は、bash引数拡張を使用して"$d"代わりにprintを使用できます"${d%/}"

おすすめ記事