2011-10-08 44 views
23

使用ack(有时打包为ACK-的grep)我知道,我能找到路径,通过这样含有的特定字符串:
ack -g somestring只能根据文件名查找文件吗?

但如果我只想要其中有“somestring”中的文件什么的文件名

回答

20

您可以使用find实用程序。事情是这样的:

find /path/to/look/in -name '*somestring*' -print 

在某些系统上,如果省略路径,则使用当前目录。在其他系统上,您不能忽略它,只需使用.代替当前目录。

另外,请阅读man find其他许多选项。

+1

这就是答案。除非您使用ack的文件类型检测功能,否则'find'就是要走的路。 –

-2

这适用于我,ack -all“somestring”,其中asck - all“somestring”将搜索包含该字符串的所有文件。 ack“somestring”只会搜索带有该字符串的文件。如果您想添加一些文件类型来永久搜索ruby文件,或者您可以在主目录中创建.ackrc文件,请添加下面的行--type-add = ruby​​ = .haml,.rake,.rsel。乔希

+0

这似乎是为了搜索文件内容。这不是问题所要求的。 – isherwood

40

我同意觉得是要走的路,但你也可以很容易地与ACK做到这一点:

ack -f | ack "string" 

这里,“ACK -f”递归地列出了所有它会搜索的文件;管道到第二个确认命令来搜索。ack -f确实具有跳过二进制文件和目录的好处,即使没有更多的参数;通常,那么“查找”命令可以被更短的“确认”命令所取代。

+0

查找速度更快。 – sloven

+0

ack -f | rg“字符串” – arpit

0

我还不能评论,否则我会将此添加到@ dmedvinsky上面的答案。您可能希望他与@惠利的answer to a different question态度结合起来,以过滤掉.svn文件:如果你想使用ack地发现,在他们的基本名称somestring的所有文件,只需添加[^/]*$的正则表达式

find /path/to/look/in -not -iwholename '*.svn*' -name '*somestring*' -print 
3

,例如,

ack -g somestring[^/]*$ 

不幸的是,--color将显示在文件名末尾的比赛从somestring;但有可能按照ack的要求进行。