ack(有时打包为ack-grep)我知道我可以通过以下方式找到包含特定字符串的paths:
ack -g somestring
文件名中包含“somestring”的文件怎么办?
ack -f | ack "string"
这里,“ack -f”递归地列出了它要搜索的所有文件;通过管道将其传递给第二个 ack 命令以进行搜索。 ack -f 确实具有跳过二进制文件和目录的优点,即使没有任何更多参数;通常,“find”命令可以替换为更短的“ack”命令。
find
实用程序。像这样的东西:
find /path/to/look/in -name '*somestring*' -print
在某些系统上,如果省略路径,则使用当前目录。在其他系统上,您不能省略它,只需使用
.
代替当前目录。此外,请阅读
man find
了解许多其他选项。
ack
查找基本名称中包含
somestring
的所有文件,只需将
[^/]*$
添加到正则表达式中,例如
ack -g somestring[^/]*$
不幸的是,
--color
将显示从
somestring
到文件名末尾的匹配;但可以使用
ack
来完成您所要求的操作。
对不同问题的回答结合起来,以过滤掉.svn
文件:
find /path/to/look/in -not -iwholename '*.svn*' -name '*somestring*' -print
-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。