特定の拡張子を持つディレクトリの下のファイルでキーワードを検索できるコマンドはありますか?
文字列grep -irn "string" ./path
は、directory./path
の下にあるすべてのファイルを再帰的に検索します。私の特定の要件は、./path
などの拡張子を持つ*.h
の下のすべてのファイルを検索することです。
いくつかの試行の後、私はgrep -irn 'string' --include '*.h'
はもっと便利です
[〜#〜] s [〜#〜] et(オン)sh ell opt ion globstar
with theコマンド
shopt -s globstar
これにより、ファイル名コンポーネントとしての**
は、ここと以下のすべてを意味します。したがって、path/**
は、path
ディレクトリとそのサブディレクトリ内のすべてを意味します。 (ここに./
と入力する必要はありません。)その後、次を使用できます。
grep -in "string" path/**/*.h
path
内およびその下のすべての.h
ファイルを検索します。
nset options with shopt -u
。
find /path -iname "*.h" -exec grep -inH "string" "{}" \;
マシンに何かをインストールできる場合は、 ack を使用することをお勧めします。
あなたはそれであなたが必要とすることを正確に行うことができます。ユースケースでは、次のことができます。
# Depending of your system, you have to use one or the other
ack --hh -i string path
ack-grep --hh -i string path
ネイティブでサポートされているファイルフィルターを見つけるには、コマンドack --help=type
を実行します。
これはどうですか?
find -L ./path -name "*.h" -exec grep -in "string" {} \;
説明:
find
コマンドに置き換えられますfind
コマンドの結果を表しますfind
と-exec
を組み合わせる場合、これはコマンドの終わりの指定子ですGnu grepを使用している場合は、必要なことを正確に実行するフラグがあります。
grep -irn --include=\*.h "string" path
他のグループでは利用できないと思いますが。