可以只根据文件名查找文件吗?

Can ack find files based on filename only?

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

但是如果我只想要文件名中有"somestring"的文件呢?


我同意"查找"是一种方法,但您也可以轻松地使用ACK:

1
ack -f | ack"string"

这里,"ack-f"递归地列出了它将要搜索的所有文件;通过管道将其发送到第二个ack命令进行搜索。ACK-F的优点是即使没有任何参数,也可以跳过二进制文件和目录;通常情况下,"find"命令可以替换为更短的"ACK"命令。


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

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

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

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


如果您希望使用ack查找所有以somestring为基名的文件,只需将[^/]*$添加到regex,例如,

1
ack -g somestring[^/]*$

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


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

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

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