以下是一个案例示例,以及它们是否匹配:
foo/node_modules -> yep
foo/bar/node_modules -> yep
foo/bar/node_modules/baz/node_modules -> matches only foo/bar/node_modules
foo/node_modules/bar/node_modules -> matches only foo/node_modules
node_modules/foo/node_modules/bar -> matches only node_modules
修改
这为2个级别做了诀窍:
const patterns = [
'*/node_modules',
'*/!(node_modules)/node_modules',
'*/!(node_modules)/*/node_modules',
]
答案 0 :(得分:1)
glob
规则"应用于文件名的各个部分(在路径分隔符/
处停止)。" 这意味着您可以& #39;执行跨越多个深度的任何通配符匹配,这对您的问题至关重要。我看到直接完成这个问题的唯一方法是使用多次搜索(并在第一次匹配后停止),例如:
ls node_modules
ls */node_modules
ls */*/node_modules
ls */*/*/node_modules
但是,这可以是accomplished with a regular expression:
^.*?node_modules(?=\/|$)
或者,您可以使用Node.JS递归遍历目录,直到您点击node_modules
的第一个实例并返回路径。