首页 文章

如何基于通配符匹配递归查找当前和子文件夹中的所有文件?

提问于
浏览
1324

如何基于通配符匹配递归查找当前和子文件夹中的所有文件?

13 回答

  • 112

    下面的命令有助于搜索任何文件

    1)无论如何
    2)结果未经许可排除文件夹
    3)从根或您喜欢的路径搜索 . 改变/选择您喜欢的路径 .

    Syntax :
    找-iname''2>&1 | grep -v "Permission denied"

    Example

    find / -iname'C * .xml'2>&1 | grep -v“权限被拒绝”

    find / -iname '*C*.xml'   2>&1 | grep -v "Permission denied"
    
  • 19
    find <directory_path>  -type f -name "<wildcard-match>"
    

    在通配符匹配中,您可以提供您希望匹配的字符串,例如* .c(适用于所有c文件)

  • 1

    如果你的shell支持a new globbing option(可以通过以下方式启用: shopt -s globstar ),你可以使用:

    echo **/*foo*
    

    以递归方式查找任何文件或文件夹 . 这由Bash 4,zsh和类似的shell支持 .


    我个人已经定义了这个shell函数:

    f() { find . -name "*$1*"; }
    

    注意:上面的行可以直接粘贴到shell或添加到用户的〜/ .bashrc文件中 .

    然后我可以通过键入来查找任何文件:

    f some_name
    

    或者,您可以使用带有简单语法的fd utility,例如 fd pattern .

  • 18

    如果要使用通配符搜索特殊文件,可以使用以下代码:

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

    假设您要从此处搜索每个.conf文件:

    . 表示从这里开始搜索(当前地点)
    -type 表示搜索项的类型,此处为文件(f) .
    -name 表示您要搜索具有 *.conf 名称的文件 .

  • 7

    搜索递归文件的默认方式,在大多数情况下可用

    find . -name "filepattern"
    

    它从您所在的当前目录开始递归遍历文件名或模式 . 使用find命令,您可以使用通配符和各种开关来查看完整的选项列表,类型

    man find
    

    或者如果您的系统没有手册页

    find --help
    

    但是,有更多现代和更快的工具,它们遍历整个文件系统并索引文件,一个常见的工具是定位或slocate / mlocate,你应该检查你的操作系统的手册如何安装它,一旦它是安装它需要启动数据库,如果安装脚本没有为你做,它可以通过键入手动完成

    sudo updatedb
    

    并且,使用它来查找某些特定的文件类型

    locate filename
    

    或者,要从当前目录中查找文件名或模式,您可以键入:

    pwd | xargs -n 1 -I {} locate "filepattern"
    

    它将查看其文件数据库并快速打印出与您键入的模式匹配的路径名 . 要查看locate的选项的完整列表,请键入: locate --helpman locate

    另外,您可以配置locate以通过cron作业在预定时间更新它的数据库,因此在1AM更新db的示例cron看起来像:

    0 1 * * * updatedb
    

    这些cron作业需要由root配置,因为updatedb需要root权限才能遍历整个文件系统 .

  • 1949

    以下命令将列出当前及其子文件夹中具有确切名称“pattern”(例如)的所有文件 .

    find ./ -name "pattern"

  • 2

    find 将查找与模式匹配的所有文件:

    find . -name "*foo"
    

    但是,如果你想要一张照片:

    tree -P "*foo"
    

    希望这可以帮助!

  • 0

    管道找到grep往往更方便;它为您提供了任意通配符匹配的正则表达式的全部功能 .

    例如,要在文件名中查找具有不区分大小写的字符串“foo”的所有文件:

    ~$ find . -print | grep -i foo
    
  • 18

    使用find

    find . -name "foo*"
    

    find 需要一个起点, . (点)指向当前目录 .

  • 7

    您可以使用:

    # find . -type f  -name 'text_for_search'
    

    如果你想使用REGX使用 -iname

    # find . -type f  -iname 'text_for_search'
    
  • 4

    fd

    如果 find 太慢,请尝试使用 fd 实用程序 - 用Rust编写的 find 的简单快速替代方法 .

    句法:

    fd PATTERN
    

    演示:

    主页:https://github.com/sharkdp/fd

  • 173
    find -L . -name "foo*"
    

    在少数情况下,我需要-L参数来处理符号目录链接 . 默认情况下,将忽略符号链接 . 在那些情况下,它很混乱,因为我将目录更改为子目录并查看匹配模式的文件但查找不会返回文件名 . 使用-L解决了这个问题 . find的符号链接选项是-P -L -H

  • 0

    用于文件搜索
    find / -xdev -name settings.xml - >整台电脑
    find ./ -xdev -name settings.xml - >当前目录及其子目录

    对于具有扩展类型的文件

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

相关问题