27

使用ack(有时打包为 ack-grep)我知道我可以通过执行以下操作找到包含特定字符串的路径:
ack -g somestring

但是,如果我只想要文件名中包含“somestring”的文件怎么办?

4

5 回答 5

50

我同意 find 是要走的路,但你也可以用 ack 轻松做到:

ack -f | ack "string"

在这里,“ack -f”递归地列出了它要搜索的所有文件;通过管道将其传递给第二个 ack 命令以进行搜索。ack -f 确实具有跳过二进制文件和目录的优势,即使没有更多参数;通常,“find”命令可以用更短的“ack”命令代替。

于 2013-03-06T20:31:06.953 回答
26

您可以使用find实用程序。像这样的东西:

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

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

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

于 2011-10-08T18:33:46.367 回答
7

如果您希望用于ack查找其基本名称中包含的所有文件somestring,只需添加[^/]*$到正则表达式,例如,

ack -g somestring[^/]*$

不幸的是,会显示从文件名到结尾的--color匹配;somestring但可以按照您的要求使用ack.

于 2016-07-27T02:57:30.883 回答
0

我还不能发表评论,否则我会将其添加到上面@dmedvinsky 的答案中。您可能希望将他的方法与@whaley对不同问题的回答结合起来,以过滤掉.svn文件:

find /path/to/look/in -not -iwholename '*.svn*' -name '*somestring*' -print
于 2014-03-22T18:53:48.153 回答
-2

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

于 2012-04-12T19:29:46.900 回答