为什么Ruby似乎随机访问目录中的文件?

时间:2011-04-03 13:34:45

标签: ruby dir

这是设计吗?

以下是代码:

class FileRenamer
    def RenameFiles(folder_path)    
        files = Dir.glob(folder_path + "/*")
    end
end

puts "Renaming files..."

renamer = FileRenamer.new()
files = renamer.RenameFiles("/home/papuccino1/Desktop/Test")
puts files

puts "Renaming complete."

似乎提取文件是随机顺序,而不是在Nautilus中显示。

enter image description here

这是设计的吗?我只是好奇。

2 个答案:

答案 0 :(得分:15)

每次在特定操作系统上的顺序应该相同,但在操作系统中 不同。

在不同的操作系统中,不能依赖行为或Dir.glob。不确定这是否是设计的,而是文件系统的人工制品。

在Windows和Linux上,结果按层次结构排序,然后按字母顺序排序;在Mac OS X上,结果按字母顺序排序。

您可以通过对结果进行排序来减轻效果,例如:

files = Dir.glob("./*").sort

或者如果您希望它不区分大小写,或许:

 files = Dir.glob("./*").sort {|a,b| a.upcase <=> b.upcase}

答案 1 :(得分:2)

斯科特的答案已经过时。我在Mac OS 10.15.6 Catalina上运行了Dir.glob,但文件未按字母顺序返回。根据ruby的文档,排序由操作系统决定。

https://ruby-doc.org/core-2.5.1/Dir.html

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