如何从目录中递归找到的所有文件中搜索行匹配

时间:2014-08-11 12:28:34

标签: php linux unix search ubuntu

使用linux命令,有没有办法知道哪个文件具有给定项目目录中的给定代码行?

对子目录中的所有文件也会递归跟踪所有目录。

说您的项目位于php并位于目录/var/www/projectDir/

并且要搜索的行是public function getProjectData(以了解哪里(在哪个文件中位于哪个子目录中)getProjectData定义了php函数?

4 个答案:

答案 0 :(得分:1)

你可以使用shell:

 grep "text string to search" directory-path -R   

编辑:为递归搜索添加-R

甚至更好,使用PHP:

$reflFunc = new ReflectionFunction('function_name');
print 'File :' $reflFunc->getFileName() . ' at line : ' . $reflFunc->getStartLine();`

答案 1 :(得分:0)

使用命令

 find /var/www/projectDir/ -name '*.php'|xargs grep 'public function getProjectData('

第一部分

find /var/www/projectDir/ -name '*.php'

将搜索所有具有扩展名php且位于目录/var/www/projectDir

内的文件

第二部分

xargs grep 'public function getProjectData('

将搜索public function getProjectData(的第一部分中找到的所有文件。

xargs用于将第一部分的输出视为第二部分的标准输入。

名为|的符号pipe会将输出传输到第二部分

输出

/var/www/projectDir/sub/directory/somephpfile.php:    public function getProjectData($param1, $param2) {

现在您可以打开文件并使用

搜索内容定义的行
(ctrl + F for gedit) or ( ctrl + W for nano)

或使用您喜欢的任何编辑器。

答案 2 :(得分:0)

我选择以下行。它总能帮到我,

find dirname -type f -print | xargs grep -i "pattern" > /tmp/samplefile

答案 3 :(得分:0)

我知道这是一个老问题,当前使用最多的IDE提供了这样的功能,但是当我开始学习编程时,我学到的第一件事就是使用:

grep -iRn "wanted string"

i :忽略模式和输入数据中的大小写区别

R :对于每个目录操作数,遵循所有符号链接,递归地读取和处理该目录中的所有文件。

n :行号

更多信息-see this