Dir[pattern]
Dir.glob(pattern)
Dir.glob(pattern) {|file| ...}
Dir.glob(pattern[, flags]) ((<ruby 1.7 特性>))
Dir.glob(pattern[, flags]) {|file| ...} ((<ruby 1.7 特性>))
以字符串数组的形式返回通配符匹配结果。若指定了块的话,将以匹配成功的文件为参数,依次计算该块,然后返回nil。
可以一次指定多个pattern,此时需要使用空白(space,tab,换行)或"\0"将它们分割开来。
p Dir.glob("f* b*") => ["foo", "bar"]
可用的通配符如下。
-
*
匹配任何字符串,包括空字符串。
-
?
匹配任何一个字符。
-
[ ]
只要匹配方括号中任何一个字符即可。若使用
-
则表示字符范围。若方括号中的首字符是^
时,表示匹配^
后的字符以外的任意字符。(在ksh或POSIX shell中可以使用!
来代替^
。) -
{ }
表示依次与括号内的字符进行组合。例如,
foo{a,b,c}
将变为fooa
,foob
,fooc
,然后再依次进行匹配。括号可以嵌套。例如,
{foo,bar{foo,bar}}
表示将依次与foo
,barfoo
,barbar
进行匹配。 -
**/
表示通配符
*/
重复出现0次以上,这将对目录进行再归式地搜索。例如,foo/**/bar
表示将依次对foo/bar
,foo/*/bar
,foo/*/*/bar
... (此后无限延伸)进行匹配。
ruby 1.7 特性:可使用反斜线对通配符进行转义处理。(请注意,在双引号内的字符串中必须进行2层转义)另外,空白类字符将失去特殊意义(但"\0"依然有效)。若想进行与1.6版本相同的处理时,应使用String#chomp等将多余的空白去掉,或使用gsub(/[\t\n]/,"\0"])进行转换即可。
ruby 1.7 特性:可以为第2可选参数指定一个类似于File.fnmatch中所使用的标识。指定标识后就可改变匹配的运作情况。
Dir.chdir([path])
Dir.chdir([path]) {|path| ... } ((<ruby 1.7 特性>))
将当前目录改为path。若省略path时,则会调用环境变量HOME
或LOGDIR
。若它们中包含设定值时,就将当前目录改为它们的值。
若当前目录变更成功就返回0,若失败则引发Errno::EXXX异常。
ruby 1.7 特性:若指定了块的话,则只会在块的执行过程中变更当前目录。这等价于
savedir = Dir.pwd Dir.chdir(newdir) begin ... ensure Dir.chdir(savedir) end
此时,带块方法的返回值就是块的执行结果。
转自:http://www.kuqin.com/rubycndocument/man/built-in-class/class_object_dir.html