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

时间:2011-10-08 18:26:53

标签: filenames ack

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

但是,如果我只想要在文件名中有“somestring”的文件呢?

5 个答案:

答案 0 :(得分:41)

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

ack -f | ack "string"

这里,“ack -f”以递归方式列出它要搜索的所有文件;管道到第二个ack命令来搜索它。   ack -f确实具有跳过二进制文件和目录的优势,即使没有任何更多的参数;通常情况下,“查找”命令可以用更短的“确认”命令替换。

答案 1 :(得分:23)

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

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

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

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

答案 2 :(得分:7)

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

ack -g somestring[^/]*$

不幸的是,--color会显示从somestring到文件名末尾的匹配项;但是可以按照ack的要求进行操作。

答案 3 :(得分:0)

我还无法发表评论,否则我会将此添加到@ dmedvinsky上面的回答中。您可能希望将他的方法与@ whaley answer to a different question结合使用,以过滤掉.svn个文件:

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

答案 4 :(得分:-2)

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