grepの--includeオプションを使用しようとしていますが、期待どおりに機能しません。
次の単純化されたテストを検討してください。
設定
me@de31:~/tmp$ cat file.h
This is a .h file
me@de31:~/tmp$ cat file.c
This is a .c file
確認する
me@de31:~/tmp$ grep "This is a" *
file.c:This is a .c file
file.h:This is a .h file
--includeを使う
me@de31:~/tmp$ grep "This is a" * --include="*.c"
file.h:This is a .h file
me@de31:~/tmp$ grep "This is a" * --include="*.h"
file.c:This is a .c file
--excludeを使う
me@de31:~/tmp$ grep "This is a" * --exclude="*.c"
file.h:This is a .h file
me@de31:~/tmp$ grep "This is a" * --exclude="*.h"
file.c:This is a .c file
ご覧のとおり、--includeは--excludeと同じ出力を持ちます。 stackexchangeの別の投稿では「-r」が必要だと主張していますが、私も試してみましたが、出力は変更されませんでした。
答え1
これは一種のバグのようです。 Ubuntu Launchpadで次の不正なファイルが見つかりました。--includeは--excludeと同じ効果があります!。
私のFedora 14システムの例:
$ more file.*
::::::::::::::
file.c
::::::::::::::
This is a .c file
::::::::::::::
file.h
::::::::::::::
This is a .h file
含む
$ grep "This is a" * --include="*.c"
file.c:This is a .c file
$ grep "This is a" * --include="*.h"
file.h:This is a .h file
入らないようにする
$ grep "This is a" * --exclude="*.c"
file.h:This is a .h file
$ grep "This is a" * --exclude="*.h"
file.c:This is a .c file
grep バージョン
$ grep --version
grep (GNU grep) 2.8