编写Bash Glob模式:包含所有.hs文件但排除.stack-work目录文件
Bash Glob模式:包含所有.hs文件但排除.stack-work目录下的文件
问题原因
你使用的!(.stack-work/*.hs)无效,是因为该模式仅匹配不与.stack-work/*.hs完全匹配的单个路径,既不会递归遍历子目录,也无法覆盖其他目录下的.hs文件。
解决步骤
- 先开启Bash的两个必要扩展选项(默认可能未启用):
shopt -s extglob globstarextglob:支持!()这类排除型扩展通配符globstar:让**可以递归匹配所有层级的子目录
- 使用以下任一Glob模式即可选中
A.hs、B.hs和D.hs,同时排除C.hs:
或更直观的拆分写法:**/*.hs !(.stack-work/**/*.hs)*.hs !(.stack-work)/**/*.hs
模式说明
**/*.hs:递归匹配所有目录下的.hs文件(包含当前目录的D.hs)!(.stack-work/**/*.hs):排除.stack-work目录下所有递归层级的.hs文件(即排除C.hs)- 拆分写法中:
*.hs:匹配当前目录下的D.hs!(.stack-work)/**/*.hs:匹配除.stack-work外其他目录下的所有.hs文件(即A.hs和B.hs)
内容的提问来源于stack exchange,提问作者Abhijit Sarkar
相关产品推荐
相关产品推荐

