【问题标题】:Can ack find files based on filename only?ack 可以仅根据文件名查找文件吗?
【发布时间】:2011-12-03 16:10:30
【问题描述】:

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

但是如果我只想要在其文件名中包含“somestring”的文件呢?

【问题讨论】:

    标签: filenames ack


    【解决方案1】:

    我同意 find 是要走的路,但您也可以使用 ack 轻松完成:

    ack -f | ack "string"
    

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

    【讨论】:

    • 查找速度更快。
    • ack -f | rg“字符串”
    • 这个答案将在路径(目录名称,问题想要排除的)以及文件名中包含匹配项。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 这就是答案。除非您使用 ack 的文件类型检测功能,否则find 是要走的路。
    • 这不是问题的答案。问题是关于如何使用 ack。至少有一个用例,这是无用的 - 考虑有人在 Windows 上使用 ack - 你的答案将不起作用。
    【解决方案3】:

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

    ack -g somestring[^/]*$
    

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 这似乎是搜索文件内容。这不是问题所要求的。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-20
        • 2021-10-30
        相关资源
        最近更新 更多