Answers:
如果您的版本grep
缺少该--include
选项,则可以使用以下选项。它们都在这样的目录结构上进行了测试:
$ tree
.
├── a
├── b
│ └── foo2.php
├── c
│ └── d
│ └── e
│ └── f
│ └── g
│ └── h
│ └── foo.php
├── foo1.php
└── foo.php
其中所有.php
文件都包含字符串string
。
使用 find
$ find . -name '*php' -exec grep -H string {} +
./b/foo2.php:string
./foo1.php:string
./c/d/e/f/g/h/foo.php:string
这将找到所有.php
文件,然后grep -H string
在每个文件上运行。使用find
的-exec
选项,{}
将替换为找到的每个文件。该-H
通知grep
要打印的文件名,以及匹配线路。
假设您有足够新的版本bash
,请使用globstar
:
$ shopt -s globstar
$ grep -H string **/*php
b/foo2.php:string
c/d/e/f/g/h/foo.php:string
foo1.php:string
全球星
如果设置,则在文件名扩展上下文中使用的模式“ **”将匹配所有文件以及零个或多个目录和子目录。如果模式后跟一个'/',则仅目录和子目录匹配。
因此,通过运行shopt -s globstar
您可以激活该功能和Bash的globstar
选项,该选项可**/*php
扩展到.php
当前目录中的所有文件(**
匹配0个或多个目录,因此也**/*php
匹配./foo.php
),然后将其grep string
。
使用 */*.php
这使grep搜索一级子目录