MacBook Zsh环境下如何编译文件名不含_server的Proto文件?
在Mac上编译不含"_server"的Proto文件
Zsh(Mac默认Shell)
- 先确认Zsh的扩展glob功能开启(默认已开启,若没开执行这条命令):
setopt extendedglob - 执行编译命令:
protoc --dart_out=grpc:proto/ ./api/(core|editor|google)/**/^*(_server).proto --proto_path=./api
这里的^*(_server)是Zsh的扩展匹配语法,专门用来排除包含_server字符串的文件名,**会递归遍历目标文件夹下的所有子目录。
Bash(如果你用的是Bash)
- 先开启Bash的扩展glob和递归匹配支持:
shopt -s extglob globstar - 执行编译命令:
protoc --dart_out=grpc:proto/ ./api/{core,editor,google}/**/!(*_server).proto --proto_path=./api
其中!(*_server)是Bash的扩展语法,作用是排除所有文件名里带_server的文件,globstar让**能递归遍历子目录。
关于Linux上[^_server]写法的问题
你同事用的[^_server]其实是个误区——它是单个字符的否定匹配,只会排除文件名里包含_、s、e、r、v这些单个字符的文件,根本不是排除整个_server字符串。这种写法只是碰巧在某些场景下看起来有效,本质是错误的,所以在Mac上自然不管用。
内容的提问来源于stack exchange,提问作者anonymous-dev
相关产品推荐
相关产品推荐

