2011-11-19 113 views
14

我基本上只想做ack foo * .citrus,并且在当前目录和下面的所有Citrus文件中找到字符串'foo'。麻烦的是,如果当前目录中没有任何Citrus文件,这将不起作用。Ack:搜索具有特定扩展名的文件的目录树

我试着搞了-G没有成功。我是否真的需要在.ackrc中添加文件类型,以便将搜索限制为具有给定扩展名的文件?

回答

11

默认情况下,ack仅在已知类型的文件(如* .java,* .cpp等)中进行搜索。它不知道有关文件* .citrus,所以在这样的文件中搜索您必须使用-a CMD行开关:

$ack -a -G '\.citrus$' foo 
1.d/1.citrus 
1:foo_bar 
+1

或者你可以使用这个技巧:http://stackoverflow.com/questions/ 3870611 /如何让-ack-support-more-filetypes –

+1

-a太过分了。 --type-set是要走的路。 –

+1

这是合乎逻辑的,但不是最有用的。这样一个简单的任务 - “搜索带有这个扩展名的文件” - 要求你不仅要使用常规扩展名(-G)来告诉它的扩展名,而且你希望它实际上搜索这些文件(-a或--type-设置 - 即使这个选择是有争议的)。你必须爱Unix。 –

4

您不必将其设置在.ackrc如果你不想要的。您也可以在您的环境中设置ACK_OPTIONS,或在命令行中指定--type-set参数。 ack不在乎。

12

正如安迪·莱斯特建议,你也可以创建一个排版不用其他不辞辛苦将其添加到您的.ackrc

ack --type-set=cit=.citrus --cit "foo" 
相关问题