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


当前回答

Use

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

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

其他回答

find -L . -name "foo*"

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

如果已安装,请尝试使用fd命令。安装说明。

查找以“name”开头的所有文件:

fd "name*"

此命令忽略所有.hhidden和.gitignoreed文件。

要包含.gitignoreed文件,请添加-I选项,如下所示:

fd -I "name*"

要包含隐藏文件,请添加-H选项,如下所示:

fd -H "name*"

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

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

find . -print | grep -i foo

Use

find path/to/dir -name "*.ext1" -o -name "*.ext2"

解释

第一个参数是要搜索的目录。默认情况下,find执行递归。-o代表-或。所以上面的意思是搜索这个通配符或这个。如果您只有一个模式,那么不需要-o。通配符模式周围的引号是必填的。

fd

如果查找速度太慢,请尝试fd实用程序,这是一个简单而快速的替代方法,可以在Rust中查找。

语法:

fd PATTERN

演示:

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