【问题标题】:Linux find file names with given string recursively [duplicate]Linux递归查找具有给定字符串的文件名[重复]
【发布时间】:2012-10-19 07:45:53
【问题描述】:

我在 Ubuntu 上,我想在当前目录和子目录中查找名称包含字符串“John”的所有文件。我知道grep 可以匹配文件的内容,但我不知道如何将它与文件名一起使用。

【问题讨论】:

    标签: linux string find


    【解决方案1】:

    使用find 命令,

    find . -type f -name "*John*"
    

    【讨论】:

    • 使用 #!/bin/bash if [ -z $1 ]; then echo "Error: Specify pattern for search"; else /usr/bin/find . -type f -name "*$1*"; fi 创建自定义 bash 脚本可以让您以完美的快捷方式运行 F search-string
    • @IliaRostovtsev - 不错,但[ -z "$1" ] 会好一点。
    • @Joe 啊,对。你的意思是如果路径有空格?但是在这里我们只检查是否存在 $1 空间会使 $2 出现,仅此而已。你的意思是理论上更好,对吧?
    • @IliaRostovtsev - 实际上,我错了。如果 $1 为空,则测试变为 if [ -z ]。我认为这将是一个语法错误,但它有效。从现在开始,我可以简化一些代码。
    【解决方案2】:

    使用 ack 很简单。 只需输入ack <string to be searched>

    【讨论】:

    【解决方案3】:

    find 命令会花费很长时间,因为它会扫描文件系统中的真实文件。

    最快的方法是使用locate 命令,它会立即给出结果:

    locate "John"
    

    如果没有找到该命令,则需要先安装mlocate包并运行updatedb命令,以准备第一次搜索数据库。

    更多细节在这里:https://medium.com/@thucnc/the-fastest-way-to-find-files-by-filename-mlocate-locate-commands-55bf40b297ab

    【讨论】:

      【解决方案4】:

      这是一个非常简单的解决方案,在您要搜索的目录中使用tree 命令。 -f 显示完整的文件路径,| 用于将 tree 的输出通过管道传输到 grep 以查找名称中包含字符串 filename 的文件。

      tree -f | grep filename
      

      【讨论】:

        猜你喜欢
        • 2019-03-29
        • 2014-07-08
        • 2017-01-20
        • 2011-08-21
        • 1970-01-01
        • 2014-04-28
        • 2022-12-06
        • 2016-04-15
        相关资源
        最近更新 更多