我正在研究一种大量使用鸡蛋(Plone)的Python程序。这意味着有198个目录充满了我可能想要在调试时搜索的Python代码。是否有一种很好的方法只在那些目录中搜索.py文件,避免不相关的代码和大型二进制文件?
答案 0 :(得分:22)
find DIRECTORY -name "*.py" | xargs grep PATTERN
顺便说一句,自写这篇文章以来,我发现了ack,这是一个更好的解决方案。
(自那次编辑以来,我发现了ag)。
答案 1 :(得分:18)
我强烈推荐ack,一个grep替代品,“针对拥有大量异构源代码树的程序员”(来自网站)
答案 2 :(得分:16)
grep -r -n "PATTERN" --include="*.py" DIRECTORY
答案 3 :(得分:6)
这些天我也经常使用ack。我做了一些调整以找到所有相关的文件类型:
# Add zcml to the xml type:
--type-add
xml=.zcml
# Add more files the plone type:
--type-add
plone=.dtml,.zpt,.kss,.vpy,.props
# buildout config files
--type-set
buildout=.cfg
# Include our page templates to the html type so we can limit our search:
--type-add
html=.pt,.zpt
# Create txt file type:
--type-set
txt=.txt,.rst
# Define i18n file types:
--type-set
i18n=.pot,.po
# More options
--follow
--ignore-case
--nogroup
重要的是要记住,如果扩展名不在其配置中,ack将无法找到文件。有关所有可用类型,请参阅“ack --help-types”。
我还假设您正在使用omelette,以便您可以grep / ack /查找所有相关文件?
答案 4 :(得分:4)
find <directory> -name '*.py' -exec grep <pattern> {} \;
答案 5 :(得分:4)
这个问题是创建collective.recipe.omelette的动机。这是一个扩展配方,它可以将您工作集中的所有鸡蛋符号链接到一个目录结构中,您可以将您喜欢的搜索实用程序指向。
答案 6 :(得分:2)
如果你想非常快速地在大型源代码树中grep标识符,那么还有GNU idutils。它需要通过运行mkid(并将其配置文件调整为不忽略.py文件)提前构建搜索数据库。如果你使用buildout,z3c.recipe.tag会处理这个问题。
答案 7 :(得分:2)
以防您需要非命令行OSS解决方案...
我使用pycharm。它内置了对buildout的支持。您将其指向buildout生成的bin / instance,并将项目外部依赖项设置为实例使用的所有egg。然后,所有IDE的内省和代码导航都能很好地工作。转到定义,转到实例,重构支持,当然还有搜索。
答案 8 :(得分:2)
答案 9 :(得分:2)
仅仅是因为答案不够......
如果您经常开发,那么使用Pydev安装Eclipse是非常值得的(或者更简单的是Aptana Studio - 这是一个经过修改的Eclipse),在这种情况下,查找工具就在那里。
答案 10 :(得分:1)
自从发现Emacs的rgrep命令以来,我的贪心生活更令人满意。
说我想在Plone的源代码中找到'IPortletDataProvider'。我这样做:
M-x rgrep
结果显示在新缓冲区中。顶部是Emacs运行的find | xargs grep
命令。所有比赛都会突出显示我可以使用标准文本搜索命令搜索缓冲区。最重要的是,我可以点击匹配上的Enter(或点击)打开该文件。
这是一种非常好的工作方式。我喜欢我不必记住find | xargs grep
参数序列,但是如果我需要的话,那就是那种力量。
答案 11 :(得分:1)
OpenGrok是源搜索和导航的绝佳选择。但是,在Java上运行。
我真的希望有像http://opengrok.plone.org/
这样的东西