У меня есть список путей к файлам, относящихся к каталогу root, и я пытаюсь определить, какой из них будет соответствовать шаблону glob. Я пытаюсь получить те же результаты, которые получили бы, если бы все файлы были в моей файловой системе, и я запустил Dir.glob(<my_glob_pattern>)
из root словаря.
Если это список путей к файлам:
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
без файловых путей в моей файловой системе?