首页 > 代码库 > 在Mac OS X上利用Spotlight搜索代码
在Mac OS X上利用Spotlight搜索代码
用grep来搜代码和方便,最原生态了,常用的:
? ~ grep ‘NuPlayer‘ -iInr --color ./aosp
其中`i`表示大小写忽略;`I`表示忽略binary文件;`n`显示搜索结果的行号;`r`表示递归搜索子目录
不过grep搜索有点慢,网上也很多通过建立索引加快搜索速度的方法:“other grep-like tools and indexing tools”
一向用户体验著称的Mac指定不会缺少这个,`Spotlight`就是系统自带的基于索引搜索工具,使用起来也很简单,ctrl+space呼出。如果想调到搜索结果文件所在的目录,就按住Command键鼠标进入.
`Spotlight`当然有自定义更强的命令行版:`mdfind`。如上面搜索命令可以这么玩:
? ~ mdfind ‘NuPlayer‘ -onlyin ./aosp | xargs grep ‘NuPlayer‘ -iInr --onlyin ./aosp
这样的速度在搜索像android代码里会快好几十倍。其中`-onlyin`告诉命令仅仅在这个目录里找,要不然会在整个硬盘上搜(不过也很快).不妨做个函数放在`bash_profile`里:
function fastfind {mdfind $@ -onlyin . | xargs grep $@ -riIn .;}
由于索引的限制,`mdfind`搜索对象不支持正则表达式,不过这几个应该够用:
mdfind ‘‘str1 str2" 表示str1和str2同时出现
mdfind "str1|str2" 表示str1和str2出现一个
mdfind "str1-str2 表示出现str1但不出现str2
`mdfind`更高级的用法,参考spotlight的metadata定义,参考spotlight。
spotlight定义的metadata不太好理解,不过敲一敲这个命令`mdls`就能知道个大概:
? ~T mdls ~/Movies/Practise.mp4 kMDItemAudioBitRate = 48 kMDItemAudioChannelCount = 2 kMDItemCodecs = ( "H.264", AAC ) kMDItemContentCreationDate = 2012-01-05 21:59:18 +0000 kMDItemContentModificationDate = 2012-01-05 21:59:18 +0000 kMDItemContentType = "public.mpeg-4" kMDItemContentTypeTree = ( "public.mpeg-4", "public.movie", "public.audiovisual-content", "public.data", "public.item", "public.content" ) ..... kMDItemFSName = "Practise.mp4" ...... ? ~T mdfind ‘kMDItemCodecs=H.264‘ | grep ‘Practise‘ /Users/hong/Movies/Practise.mp4
spotlight里正是通过这些‘kMDItem‘开头的metadata来做索引的
命令行控可以再看看这个:“用命令行使用spotlight”