使用Glob和目录

"Globing"文件(带有Dir.glob )在Ruby中允许您仅选择给定目录中所需的文件,例如所有XML文件。即使Dir.blog正则表达式,不是。与Ruby's正则表达式相比,它非常有限,并且与shell扩展通配符更密切相关。

与Globing相反,迭代目录中的所有文件,可以使用Dir.foreach 方法。

示例

以下glob将匹配当前目录中以.rb结尾的所有文件。它使用单个通配符,星号。星号将匹配零个或多个字符,因此任何以.rb结尾的文件都将匹配此glob,包括一个名为simply.rb的文件,在文件扩展名之前没有任何内容。它的前一段。glob方法将返回所有与globbing规则匹配的文件作为数组,这些文件可以保存以备后用或迭代。

#!/usr/bin/env ruby


Dir.glob('*.rb')。每个do | f |

放置f

结束

通配符和更多

只有少数通配符需要学习:

  • *–匹配零个或更多字符。仅包含星号且没有其他字符或通配符的全局将与当前目录中的所有文件匹配。如果没有更多字符来缩小搜索范围,则星号通常与文件扩展名组合。
  • **–递归匹配所有目录。这用于下降到目录树并查找当前目录子目录中的所有文件,而不仅仅是当前目录中的文件。在下面的示例代码中探索了此通配符。
  • –匹配任何一个字符。这对于查找名称为特定格式的文件很有用。例如,可以表达5个字符和一个.xml扩展名如?????。xml
  • [a-z]–匹配字符集中的任何字符。该集合可以是字符列表,也可以是用连字符分隔的范围。字符集遵循与正则表达式中的字符集相同的语法,并且其行为方式与正则表达式中的字符集相同。
  • {a,b}–匹配模式a或b。尽管这看起来像正则表达式量词,它不是't.例如,在正则表达式中,模式a{1,2}将匹配1或2'a'字符。在球形中,它将匹配字符串a1a2。其他模式可以嵌套在此构造内部。

教育资源网_1

有一点需要考虑的是案例敏感性。它'由操作系统决定是否TEST.txtandTeSt.TxT参考相同的文件。在Linux和其他系统上,这些是不同的文件。在Windows上,这些将引用相同的文件。

操作系统还负责显示结果的顺序。例如,如果您're在Windows和Linux上可能会有所不同。

最后要注意的是Dir[globstring]便利方法。这在功能上与106相同Dir.glob(globstring)并且在语义上也是正确的(您正在索引目录,就像数组一样)。因此,您可能会看到Dir[]更频繁Dir.glob,但他们是一样的。

使用通配符的示例

以下示例程序将以多种不同的组合演示尽可能多的模式。

#!/usr/bin/env-ruby


#获取所有.xml文件

Dir['*.xml']


#获取具有5个字符的所有文件和.jpg扩展名

Dir['?????。jpg']


#获取所有jpg,png和gif图像

Dir['*。{jpg、 png,gif}']


#下降到目录树并获得所有jpg图像

#注意:这也将文件当前目录中的jpg图像

Dir['**/*.jpg']


#ţ从Uni开始下降到所有目录,并查找所有

35; jpg图像。

35;注意:这只下降到一个目录

Dir[&\\#39;Uni**/*.jpg \35;#39;]


\####下降到所有目录目录中,并下降到所有目录中,都进入所有从Uni开始,所有

#子目录目录以Uni开始并查找

#all.jpg图像

Dir['Uni**/**/*.jpg']

螃蟹小知识