2012-02-10 72 views
0

我正在寻找可以从Mac OS X终端运行的单线程帮助。我在我的Mac上使用MAMP进行网页开发。我的“/ Applications/MAMP/htdocs”目录中有很多CakePHP项目。为了简单起见,我们只想说,我有两个CakePHP的项目,这是find /Applications/MAMP/htdocs -type d -iname Controller*命令的输出:帮助“查找”和“grep”命令

/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 for"命令。任何帮助,将不胜感激。谢谢!

回答

0

溶液1

也许你要检查find命令的两个选项:(i)pathregex 他们,你可以缩小你的查找结果和|xargs找到的文件传递给你的grep -il "searchString"的例子。它看起来像:

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,执行它。

+0

我得到了两种解决方案的工作!非常感谢你!为了获得第一个解决方案来处理我的特定需求,我必须用'“*/app/Controller *”替换'“*/app/Controller/*。php”'(CakePHP <2.0是“controllers”,CakePHP > = 2.0是没有“s”的“Controller”)。为了得到第二种解决方案来处理我的特定需求,我必须用'sed -E'替换'sed -r'。再次感谢! – Nick 2012-02-11 00:04:58

0

你试过了吗?

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

事情是我不想浪费时间搜索“app/tests/cases/controllers”文件夹或“cake /”中的任何文件夹。不过谢谢! – Nick 2012-02-10 22:51:59