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


当前回答

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

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

假设您想从这里搜索每个.conf文件:

.表示从此处(当前位置)开始搜索-type表示此处为文件(f)的搜索项的类型。-name表示您希望使用*.conf名称搜索文件。

其他回答

如果您的shell支持新的globbing选项(可以通过:shopt-s globstar启用),则可以使用:

echo **/*foo*

递归查找任何文件或文件夹。这得到了Bash 4、zsh和类似外壳的支持。


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

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

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

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

f some_name

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

我很惊讶地发现,当我们递归地执行时,locate并没有被大量使用。

我将首先定位“$PWD”以获取当前感兴趣文件夹中的文件列表,然后根据需要对它们运行grep。

locate "$PWD" | grep -P <pattern>

当然,这是假设updatedb已完成,索引定期更新。这是一种查找文件的方式,比运行查找并要求它从树上下来快得多。提及这一点是为了完整。如果这棵树不是很重,就不反对使用find。

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

find . -name "*foo"

但是,如果您需要图片:

tree -P "*foo"

你也可以使用ripgrep。

例子:

搜索所有包含子字符串psql的文件名,

rg --files | rg psql

对于Python>3.5,使用glob。指向当前文件夹并查找.txt文件:

 python -c "import glob;[print(x) for x in glob.glob('./**/*txt', recursive=True)]"

对于较旧版本的Python,可以安装glob2