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

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

答案

为此使用查找

find . -name "foo*"

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

用管道发现 grep 通常更方便;它为您提供了用于任意通配符匹配的正则表达式的全部功能。

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

~$ find . -print | grep -i foo

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

find . -name "*foo"

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

tree -P "*foo"

希望这可以帮助!

find -L . -name "foo*"

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

如果您的外壳支持新的通配选项 (可以通过以下方式启用: shopt -s globstar ),则可以使用:

echo **/*foo*

递归查找任何文件或文件夹。 Bash 4,zsh 和类似的 shell 支持此功能。


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

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

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

然后,我可以通过键入以下内容查找任何文件:

f some_name

或者,您可以使用具有简单语法的fd实用程序 ,例如fd pattern

find <directory_path>  -type f -name "<wildcard-match>"

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

fd

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

句法:

fd PATTERN

演示:

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

您可以使用:

# find . -type f  -name 'text_for_search'

如果要使用 REGX,请使用-iname

# find . -type f  -iname 'text_for_search'

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

find . -name "filepattern"

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

man find

或者您的系统上没有手册页

find --help

但是,还有更多更现代,更快捷的工具可以遍历整个文件系统并为文件建立索引,其中一种常见的工具是定位或定位 / 定位,您应该查看操作系统的手册以了解如何安装它,安装后需要启动数据库,如果安装脚本不帮您完成,可以通过键入以下内容手动完成

sudo updatedb

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

locate filename

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

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

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

另外,您可以配置 locate 通过 cron 作业按计划的时间更新它的数据库,因此示例 cron 在 1AM 更新数据库的示例如下所示:

0 1 * * * updatedb

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

用于文件搜索
find / -xdev -name settings.xml > 整个计算机
find ./ -xdev -name settings.xml > 当前目录及其子目录

用于扩展名类型的文件

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