【发布时间】:2011-12-03 16:10:30
【问题描述】:
使用ack(有时打包为ack-grep)我知道我可以通过以下方式找到包含特定字符串的路径:ack -g somestring
但是如果我只想要在其文件名中包含“somestring”的文件呢?
【问题讨论】:
使用ack(有时打包为ack-grep)我知道我可以通过以下方式找到包含特定字符串的路径:ack -g somestring
但是如果我只想要在其文件名中包含“somestring”的文件呢?
【问题讨论】:
我同意 find 是要走的路,但您也可以使用 ack 轻松完成:
ack -f | ack "string"
这里,“ack -f”递归地列出了它要搜索的所有文件;通过管道将其传递给第二个 ack 命令以进行搜索。 ack -f 确实具有跳过二进制文件和目录的优点,即使没有更多参数;通常,“find”命令可以被更短的“ack”命令代替。
【讨论】:
您可以使用find 实用程序。像这样的:
find /path/to/look/in -name '*somestring*' -print
在某些系统上,如果您省略路径,则使用当前目录。在其他系统上你不能省略它,只需将. 用于当前目录即可。
另外,请阅读 man find 了解许多其他选项。
【讨论】:
find 是要走的路。
如果您希望使用ack 查找所有基本名称中包含somestring 的文件,只需将[^/]*$ 添加到正则表达式中,例如,
ack -g somestring[^/]*$
不幸的是,--color 将显示从somestring 到文件名末尾的匹配;但可以使用ack 来完成您要求的操作。
【讨论】:
我还不能发表评论,否则我会将其添加到上面@dmedvinsky 的答案中。您可能希望将他的方法与@whaley 的answer to a different question 结合起来,以过滤掉.svn 文件:
find /path/to/look/in -not -iwholename '*.svn*' -name '*somestring*' -print
【讨论】:
这对我有用, ack -all "somestring" 其中 ack --all "somestring" 将搜索包含该字符串的所有文件。 ack "somestring" 只会搜索带有该字符串的文件。如果您想添加一些文件类型以像 ruby 文件一样永久搜索,或者您可以在主目录中创建 .ackrc 文件,请添加以下行 --type-add=ruby=.haml,.rake,.rsel 。乔什
【讨论】: