![Glob 来匹配子目录](https://linux22.com/image/9599/Glob%20%E6%9D%A5%E5%8C%B9%E9%85%8D%E5%AD%90%E7%9B%AE%E5%BD%95.png)
希望我不是唯一发现不当行为的人。如果你一小时前问我,我就有 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) 是查找完整描述的地方。
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