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%/}"
。