web-dev-qa-db-ja.com

ディレクトリの下にある特定の拡張子を持つファイルのGrep

特定の拡張子を持つディレクトリの下のファイルでキーワードを検索できるコマンドはありますか?

文字列grep -irn "string" ./pathは、directory./pathの下にあるすべてのファイルを再帰的に検索します。私の特定の要件は、./pathなどの拡張子を持つ*.hの下のすべてのファイルを検索することです。

11
Ginu Jacob

いくつかの試行の後、私はgrep -irn 'string' --include '*.h'はもっと便利です

11
Ginu Jacob

[〜#〜] 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" "{}" \;
5
Ipor Sircer

マシンに何かをインストールできる場合は、 ack を使用することをお勧めします。

あなたはそれであなたが必要とすることを正確に行うことができます。ユースケースでは、次のことができます。

# Depending of your system, you have to use one or the other
ack --hh -i string path
ack-grep --hh -i string path
  • -hhhファイルのフィルター
  • -iはケースを無視します

ネイティブでサポートされているファイルフィルターを見つけるには、コマンドack --help=typeを実行します。

3
A.D.

これはどうですか?

find -L ./path -name "*.h" -exec grep -in "string" {} \;

説明:

  • -L:シンボリックリンクをたどる
  • -名前:アスタリスクを使用して、拡張子を説明できます
  • -in:提案と同じですが、「r」はfindコマンドに置き換えられます
  • {}:これはfindコマンドの結果を表します
  • \; :find-execを組み合わせる場合、これはコマンドの終わりの指定子です
3
Dominique

Gnu grepを使用している場合は、必要なことを正確に実行するフラグがあります。

grep -irn --include=\*.h "string" path

他のグループでは利用できないと思いますが。

0
plnu