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搜索一级子目录