grep --include は --exclude と同様に動作します。

grep --include は --exclude と同様に動作します。

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

関連情報