gpt4 book ai didi

ruby - 有没有简单的方法来模拟 Dir::glob?

转载 作者:数据小太阳 更新时间:2023-10-29 08:32:40 27 4
gpt4 key购买 nike

我有一个文件名列表,我想实现 Dir::glob

我认为这很容易,因为有 File::fnmatch这看起来像是正确的工具。但是,这两种方法在某些情况下表现不同:

# Given a directory layout like this:
# +
# |-- file
# |-+ folder
# | |-- file

# gives ['file','folder/file']
Dir.glob('**/file')

# gives ['folder/file']
['file','folder','folder/file'].select{|n| File.fnmatch?('**/file', n) }

前置斜杠解决了这个问题,但引入了另一个问题:

# gives ['file,'folder/file']
['file','folder','folder/file'].select{|n| File.fnmatch?('**/file','/'+n) }
# gives an empty array, but should give 'file' and 'folder' like Dir.glob does.
['file','folder','folder/file'].select{|n| File.fnmatch?('f*','/'+n) }

有人已经解决了这个问题,还是我必须做一些 Regexp Magic (tm)?

最佳答案

你需要指向一个FNM_PATHNAME标志

> ['file','folder','folder/file'].select{|n| File.fnmatch?('**/file', n, File::FNM_PATHNAME) }
=> ["file", "folder/file"]
> ['file','folder','folder/file'].select{|n| File.fnmatch?('f*',n, File::FNM_PATHNAME) }
=> ["file", "folder"]

关于ruby - 有没有简单的方法来模拟 Dir::glob?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16460006/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com