理解grep的--include参数

时间:2015-07-09 17:59:21

标签: bash unix grep full-text-search

当我打电话给grep时,有人可以解释为什么我会收到以下输出吗?

dbliss@nx5[~]> grep -rnwl --include=ardid.sh.e* . -e "pkg_resources"
grep: ./.pulse/a319a33547084e303e0286aa00000023-runtime: Permission denied
grep: ./.pulse/2d3380c658b942aac267d6570000001f-runtime: Permission denied
grep: ./.pulse/d1aa29d3e0e227d33d032c9f00000020-runtime: Permission denied
grep: ./.pulse/e7a8f36648b96d90ecbddd2f00000018-runtime: Permission denied
grep: ./.pulse/922bdeb7e34db855d003e2fd00000019-runtime: Permission denied
grep: ./.pulse/2e970606c3a2bfa06aa690e600000018-runtime: Permission denied
grep: ./.pulse/c113767245ecdc7cb59125af00000017-runtime: Permission denied
grep: ./.pulse/0202df89e10e160883b6aa8200000021-runtime: Permission denied

我正在尝试将搜索范围限制为与模式ardid.sh.e*匹配的文件 - 即,以ardid.sh.开头,后跟任意数量的其他字符。但是输出显示.pulse目录中的一堆文件在名称中没有包含ardid

如果这是一个错误的电话,我应该拨打什么电话?

2 个答案:

答案 0 :(得分:2)

检查它们是否实际上是文件,而不是目录或符号链接。

grep可能正在尝试访问它们以搜索与您的模式匹配的文件,并且尽管有--include参数但仍然失败。

答案 1 :(得分:-2)

输出很可能是标准输出grep产生的部分,而是标准错误输出。 grep必须访问文件内容才能扫描搜索模式。为此,它需要对文件的读取权限和输入目录的权限。如果无法获得访问权限,它会按文件或目录发布该报告。

如果您只是删除错误输出以仅返回 标准输出,则可以轻松自行测试:

grep -rnwl --include=ardid.sh.e* . -e "pkg_resources" 2 > /dev/null

该命令的输出可能不再显示那些条目......