是否可以仅根据文件名来查找文件?

问题描述 投票:0回答:6
使用

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



但是如果我只想要

文件名中包含“somestring”的文件怎么办?

filenames ack
6个回答
50
投票
我同意 find 是可行的方法,但你也可以使用 ack 轻松做到这一点:

ack -f | ack "string"

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


26
投票
您可以使用

find

实用程序。像这样的东西:

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

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

.

 代替当前目录。

此外,请阅读

man find

 了解许多其他选项。


7
投票
如果您希望使用

ack

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

ack -g somestring[^/]*$

不幸的是,

--color

将显示从
somestring
到文件名末尾的匹配;但可以使用 
ack
 来完成您所要求的操作。 


0
投票
我还不能发表评论,否则我会将其添加到上面 @dmedvinsky 的答案中。您可能希望将他的方法与@whaley的

对不同问题的回答结合起来,以过滤掉.svn

文件:

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

0
投票
“Jeffrey Aguilera”提供的答案应标记为正确答案。与

-g

 选项一起,
-w
 选项非常方便。在下面的调用中,我有兴趣查找具有“001”的所有文件和目录的名称:

ack -w '001' -g
pghack/001.src/index.js
pghack/001.src/stl.js
migrations/001-initial.sql
...
expeditions/001/chords.mjs
expeditions/001/chords.html
expeditions/001/README.md
诉诸

find

命令是不必要的,并且不能回答OP的问题,IMO。


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

© www.soinside.com 2019 - 2024. All rights reserved.