grepで指定した拡張子のみ対象としサブディレクトリも含む再帰検索する方法

拡張子を指定して、さらにディレクトリ配下すべてを対象にgrepする方法を以下に記します。
findやxargsを使用せず、grepのオプションのみで実現できます。


関連記事

includeオプションで拡張子を指定(パターンを指定)

以下に記す構文により、指定したパターンのファイルのみ対象として検索します。
もちろん、配下のディレクトリ内のファイルも対象となります。(再帰検索となります。)

grep -r --include=パターン 検索文字列 ディレクトリ

尚、オプション-rでサブディレクトリも対象となります。

以下に実行例を記します。

includeオプションなしでcygwinというキーワードを検索~

たくさん出力されてしまいます。

$ grep -r cygwin /etc/
/etc/csh.login:  set term=cygwin
/etc/defaults/etc/csh.login:  set term=cygwin
/etc/defaults/etc/DIR_COLORS:TERM cygwin
/etc/defaults/etc/DIR_COLORS:TERM rxvt-cygwin
/etc/defaults/etc/DIR_COLORS:TERM rxvt-cygwin-native
<省略>

拡張子confのみ対象としてgrep

$ grep -r --include='*.conf' cygwin /etc/
/etc/nsswitch.conf:#    see https://cygwin.com/cygwin-ug-net/ntsec.html#ntsec-mapping-nsswitch

excludeオプションもあります

指定した拡張子のファイルのみ対象とする場合は、includeでしたが、除外するexcludeオプションもあります。
構文はincludeと同じで、includeがexcludeにかわります。

実行例

パターンなので拡張子だけではない

本資料では、よくあると思われる拡張子によるパターン検索例を記述しました。
しかし、include, exclude に指定するのはパターンなので、以下のようにファイル名にbashという文字列が含まれるものを対象とするようなこともできます。

$ grep -r --include='*bash*' cygwin /etc/
/etc/defaults/etc/skel/.bashrc:# a patch to the cygwin mailing list.
/etc/defaults/etc/skel/.bash_profile:# a patch to the cygwin mailing list.
/etc/skel/.bashrc:# a patch to the cygwin mailing list.
/etc/skel/.bash_profile:# a patch to the cygwin mailing list.

以上、grepで対象ファイルを絞り込み、再帰検索する方法でした。



トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS