我有一个相对于根目录的文件路径列表,并试图确定哪个将与 glob 模式匹配。Dir.glob(<my_glob_pattern>)
如果所有文件都在我的文件系统上并且我从根目录运行,我正在尝试获得相同的结果。
如果这是文件路径列表:
foo/index.md
foo/bar/index.md
foo/bar/baz/index.md
foo/bar/baz/qux/index.md
这是全局模式:
foo/bar/*.md
如果文件存在于我的文件系统中,则Dir.glob('foo/bar/*.md')
仅返回foo/bar/index.md
.
glob
文档提到fnmatch
,我尝试使用它,但发现该模式foo/bar/*.md
匹配任意数量的嵌套子目录中的.md
文件,类似于目录Dir.glob('foo/bar/**/*.md')
的直接foo/bar
子目录:
my_glob = 'foo/bar/*.md'
filepaths = [
'foo/index.md',
'foo/bar/index.md',
'foo/bar/baz/index.md',
'foo/bar/baz/qux/index.md',
]
# Using the provided filepaths
filepaths_that_match_pattern = filepaths.select{|path| File.fnmatch?(my_glob, path)}.sort
# If the filepaths actually existed on my filesystem
filepaths_found_by_glob = Dir.glob(my_glob).sort
raise Exception.new("They don't match!") unless filepaths_that_match_pattern == filepaths_found_by_glob
我[错误地]期望上面的代码可以工作,但filepaths_found_by_glob
只包含直接子代,同时也filepaths_that_match_pattern
包含所有嵌套的子代。
如何Dir.glob
在文件系统上没有文件路径的情况下获得相同的结果?