当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby Dir.glob用法及代码示例


本文简要介绍ruby语言中 Dir.glob 的用法。

用法

glob( pattern, [flags], [base: path] [, sort: true] ) → array
glob( pattern, [flags], [base: path] [, sort: true] ) { |filename| block } → nil

扩展 pattern ,这是一个模式字符串或模式字符串的 Array ,并返回一个包含匹配文件名的数组。如果给定了一个块,则为每个匹配的文件名调用一次该块,将文件名作为参数传递给该块。

可选的 base 关键字参数指定用于解释相对路径名的基本目录,而不是当前工作目录。由于在这种情况下结果没有以基本目录名称为前缀,因此如果您需要真实路径,则需要在基本目录名称前面加上前缀。

匹配单个通配符或字符集的结果按二进制升序排序,除非 false 作为可选的 sort 关键字参数给出。 Array 的模式字符串和大括号的顺序被保留。

请注意,该模式不是正则表达式,它更接近于 shell glob。有关flags 参数的含义,请参见 File::fnmatch 。区分大小写取决于您的系统(File::FNM_CASEFOLD 被忽略)。

*

匹配任何文件。可以被 glob 中的其他值限制。相当于正则表达式中的/.*/mx

*

匹配所有文件

c*

匹配所有以c 开头的文件

*c

匹配所有以 c 结尾的文件

*c*

匹配所有包含 c 的文件(包括开头或结尾)。

请注意,这不会匹配类 Unix 隐藏文件(点文件)。为了将它们包含在匹配结果中,您必须使用 File::FNM_DOTMATCH 标志或类似 "{*,.*}" 的标志。

**

如果后跟 / 则递归匹配目录。如果此路径段包含任何其他字符,则与通常的 * 相同。

?

匹配任何一个字符。相当于正则表达式中的/.{1}/

[set]

匹配 set 中的任何一个字符。行为与 Regexp 中的字符集完全相同,包括集合否定 ([^a-z])。

{p,q}

匹配文字 p 或文字 q 。相当于正则表达式中的模式交替。

匹配文字的长度可能超过一个字符。可以指定两个以上的文字。

\

转义下一个元字符。

请注意,这意味着您不能在 windows 上使用反斜杠作为 glob 的一部分,即 Dir["c:\foo*"] 不起作用,请改用 Dir["c:/foo*"]

例子:

Dir["config.?"]                     #=> ["config.h"]
Dir.glob("config.?")                #=> ["config.h"]
Dir.glob("*.[a-z][a-z]")            #=> ["main.rb"]
Dir.glob("*.[^r]*")                 #=> ["config.h"]
Dir.glob("*.{rb,h}")                #=> ["main.rb", "config.h"]
Dir.glob("*")                       #=> ["config.h", "main.rb"]
Dir.glob("*", File::FNM_DOTMATCH)   #=> [".", "config.h", "main.rb"]
Dir.glob(["*.rb", "*.h"])           #=> ["main.rb", "config.h"]

Dir.glob("**/*.rb")                 #=> ["main.rb",
                                    #    "lib/song.rb",
                                    #    "lib/song/karaoke.rb"]

Dir.glob("**/*.rb", base: "lib")    #=> ["song.rb",
                                    #    "song/karaoke.rb"]

Dir.glob("**/lib")                  #=> ["lib"]

Dir.glob("**/lib/**/*.rb")          #=> ["lib/song.rb",
                                    #    "lib/song/karaoke.rb"]

Dir.glob("**/lib/*.rb")             #=> ["lib/song.rb"]

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Dir.glob。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。