Glob 来匹配子目录

Glob 来匹配子目录

希望我不是唯一发现不当行为的人。如果你一小时前问我,我就有 99% 的信心

test/src/**/*.js

将匹配 src 中的所有 .js 文件以及 src 的所有子目录..但我使用的是 MacOS 并使用 Bash 3.2.57,并且它不匹配多个文件。

有人知道可能出了什么问题吗?

答案1

Bash 3.2 不支持 globstar:

$ shopt -s globstar
bash: shopt: globstar: invalid shell option name

没有shopt -s globstar,**只是一个普通的非递归 glob。

狂欢消息页面说:

这是自 bash-3.2 发布以来 bash-4.0 中添加的新功能的简要描述。与往常一样,手册页 (doc/bash.1) 是查找完整描述的地方。

  1. Bash 中的新功能

    [...]

    w。有一个新的 shell 选项:globstar。启用后,通配代码会进行**特殊处理 - 它递归地匹配所有目录(以及其中的文件,如果适用)。

您需要将 bash 更新到至少 4.0(可能从自制软件安装一个),或者使用find.

答案2

你可以用find它来代替。例如:

find ./test/src -type f -name \*.js

如果您想限制为仅 2 个目录深度:

find ./test/src -maxdepth 2 -type f -name \*.js

相关内容