#navi(../) * grepで指定した拡張子のみ対象としサブディレクトリも含む再帰検索する方法 [#y0c3d411] 拡張子を指定して、さらにディレクトリ配下すべてを対象にgrepする方法を以下に記します。~ findやxargsを使用せず、grepのオプションのみで実現できます。 #contents #htmlinsertpcsp(linux_ads_top.html,linux-sp.html) * 関連記事 [#p1989ed7] -[[grepでタブを検索する方法>逆引きUNIXコマンド/grepでタブを検索する方法]] -[[grepでハイフン付のキーワードを検索する方法>逆引きUNIXコマンド/grepでハイフン付のキーワードを検索する方法]] -[[grepでパターンヒットがあったファイルのファイル名のみ表示する方法>逆引きUNIXコマンド/grepでパターンヒットがあったファイルのファイル名のみ表示する方法]] -[[grepで大文字小文字を区別しないで検索する>逆引きUNIXコマンド/grepで大文字小文字を区別しないで検索する]] -[[grepで指定したキーワードに色をつける>逆引きUNIXコマンド/grepで指定したキーワードに色をつける]] -[[grepで検索した行の前後も表示する方法>逆引きUNIXコマンド/grepで検索した行の前後も表示する方法]] -[[grepで複数のキーワードを除外する方法>逆引きUNIXコマンド/grepで複数のキーワードを除外する方法]] -[[grepで複数キーワードを利用する>逆引きUNIXコマンド/grepで複数キーワードを利用する]] -[[grep単体で隠しファイルや隠しディレクトリも対象にする方法>逆引きUNIXコマンド/grep単体で隠しファイルや隠しディレクトリも対象にする方法]] -[[grepで指定した拡張子のみ対象としサブディレクトリも含む再帰検索する方法>逆引きUNIXコマンド/grepで指定した拡張子のみ対象としサブディレクトリも検索する方法]] * includeオプションで拡張子を指定(パターンを指定) [#eec4ba6f] 以下に記す構文により、指定したパターンのファイルのみ対象として検索します。~ もちろん、配下のディレクトリ内のファイルも対象となります。(再帰検索となります。) grep -r --include=パターン 検索文字列 ディレクトリ 尚、オプション''-r''でサブディレクトリも対象となります。 以下に実行例を記します。 ** includeオプションなしでcygwinというキーワードを検索~ [#n74f6c25] たくさん出力されてしまいます。 $ 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 [#c977445a] $ grep -r --include='*.conf' cygwin /etc/ /etc/nsswitch.conf:# see https://cygwin.com/cygwin-ug-net/ntsec.html#ntsec-mapping-nsswitch * excludeオプションもあります [#v20dada4] 指定した拡張子のファイルのみ対象とする場合は、includeでしたが、除外するexcludeオプションもあります。~ 構文はincludeと同じで、includeがexcludeにかわります。 実行例 -exclude実行例 $ grep -r --exclude='*.conf' cygwin /etc/ | head -10 /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 <省略> * パターンなので拡張子だけではない [#s253a301] 本資料では、よくあると思われる拡張子によるパターン検索例を記述しました。~ しかし、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で対象ファイルを絞り込み、再帰検索する方法でした。 #htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)