“** / * /”和“** /”之间的区别?

时间:2012-10-25 15:54:35

标签: ruby

以下是使用glob递归列出目录的两种方法:

Dir.glob("**/*/")

Dir.glob("**/")

输出似乎是相同的,至少对于一个小子树。我错过的那两个命令之间有区别吗?

2 个答案:

答案 0 :(得分:2)

**匹配0个或更多目录。通过在末尾放置*,您可以删除根目录中的目录,基本上将其设为1或更多:

 a = Dir.glob('/tmp/**/*/').sort     
 b = Dir.glob('/tmp/**/').sort.size
 b.size => 19
 a.size => 18
 b - a =>  ["/tmp/"]

虽然没有领先的常量路径,但看起来并不存在差异,因为0长度匹配不是很有趣并且不会被放入结果中。

答案 1 :(得分:0)

在那种情况下,没有。

但是,有些情况下,这种区分可能很重要。如果模式是**/***/*/*以递归方式匹配文件而不是目录,则第一个将包含当前目录中的文件,而后者仅列出至少一个级别的文件。当前目录,因为中间的/*/必须匹配。