Find 协助;查找“;及;grep“;命令

Find 协助;查找“;及;grep“;命令,find,grep,Find,Grep,我正在寻找一个可以从MacOSX终端运行的单行程序的帮助。我在Mac上使用MAMP进行web开发。我的“/Applications/MAMP/htdocs”目录中有很多CakePHP项目。为了简单起见,假设我有两个CakePHP项目,这是find/Applications/MAMP/htdocs-type d-iname Controller*命令的输出: /Applications/MAMP/htdocs/my_cake1.3_project/app/controllers /Applicat

我正在寻找一个可以从MacOSX终端运行的单行程序的帮助。我在Mac上使用MAMP进行web开发。我的“/Applications/MAMP/htdocs”目录中有很多CakePHP项目。为了简单起见,假设我有两个CakePHP项目,这是
find/Applications/MAMP/htdocs-type d-iname Controller*
命令的输出:

/Applications/MAMP/htdocs/my_cake1.3_project/app/controllers
/Applications/MAMP/htdocs/my_cake1.3_project/app/tests/cases/controllers
/Applications/MAMP/htdocs/my_cake1.3_project/cake/console/templates/skel/controllers
/Applications/MAMP/htdocs/my_cake1.3_project/cake/console/templates/skel/tests/cases/controllers
/Applications/MAMP/htdocs/my_cake1.3_project/cake/libs/controller
/Applications/MAMP/htdocs/my_cake1.3_project/cake/tests/cases/libs/controller
/Applications/MAMP/htdocs/my_cake1.3_project/cake/tests/test_app/controllers
/Applications/MAMP/htdocs/my_cake1.3_project/cake/tests/test_app/plugins/test_plugin/controllers
/Applications/MAMP/htdocs/my_cake2_project/app/Controller
/Applications/MAMP/htdocs/my_cake2_project/app/Test/Case/Controller
/Applications/MAMP/htdocs/my_cake2_project/lib/Cake/Console/Templates/skel/Controller
/Applications/MAMP/htdocs/my_cake2_project/lib/Cake/Console/Templates/skel/Test/Case/Controller
/Applications/MAMP/htdocs/my_cake2_project/lib/Cake/Controller
/Applications/MAMP/htdocs/my_cake2_project/lib/Cake/Test/Case/Controller
/Applications/MAMP/htdocs/my_cake2_project/lib/Cake/Test/test_app/Controller
/Applications/MAMP/htdocs/my_cake2_project/lib/Cake/Test/test_app/Plugin/TestPlugin/Controller
现在,有时我想找到一段代码,我知道我在CakePHP项目的一个控制器中使用了它,但我不记得它是哪个项目,所以我想搜索所有的代码。不过,我不想浪费时间在“app/tests/cases/controllers”文件夹或“cake/”中的任何文件夹中搜索。
find/Applications/MAMP/htdocs-type d-iname Controller*| grep-i/app/Controller
命令为我提供了要搜索的文件夹列表:

/Applications/MAMP/htdocs/my_cake1.3_project/app/controllers
/Applications/MAMP/htdocs/my_cake2_project/app/Controller

我只需要找到一种获取输出的方法,在每行末尾添加一个斜杠和星号(/*),并将每行导入
grep-il“string to search”
命令。任何帮助都将不胜感激。谢谢

你试过这个吗

find /Applications/MAMP/htdocs -type d -iname Controller* 
-exec grep -il "string to search for" {} /;

解决方案1

也许您想检查find命令的两个选项:
(i)path
regex
使用它们,您可以缩小查找结果的范围,并将找到的文件传递到
grep-il“searchString”
,例如通过
|xargs
。它看起来像:

    find /Applications/MAMP/htdocs -type f -ipath "*/app/Controller/*.php" 
| xargs grep -il 'foo'  
使用
-regex
将更加灵活

解决方案2

但是,如果您真的想:

找到获取该输出的方法,将斜杠和星号(/*)添加到 结束每一行,并将每一行管道连接到grep-il“字符串以进行搜索 “为”命令

(顺便说一句,这里的“管道”不起作用。)

您可以这样做:

find .(your original find).. |grep -i "/app/Controller" 
 |sed -r 's#^(.*)$#grep -il "foo" \1/*#g'|sh  

这个把戏是由
sed.| sh
完成的。sed行将选择上一个grep的结果,添加grep命令和选项:(
grep-il“foo”
)并附加“
/*
”,以构造一个完整的grep命令。最后通过管道连接到sh来执行它。

问题是我不想浪费时间在“app/tests/cases/controllers”文件夹或“cake/”中的任何文件夹中搜索。不过,谢谢!我有两种解决方案!非常感谢你!为了使第一个解决方案能够满足我的特定需求,我必须将
“*/app/Controller/*.php”
替换为
“*/app/Controller*”
(CakePHP<2.0是“controllers”,CakePHP>=2.0是没有“s”的“Controller”)。为了使第二个解决方案能够满足我的特定需求,我必须将
sed-r
替换为
sed-E
。再次感谢!