6

这是设计使然吗?

这是代码:

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 中显示的那样。

在此处输入图像描述

这是设计使然吗?我只是好奇。

4

2 回答 2

14

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

不能依赖行为或 Dir.glob 在不同的操作系统中相同。不确定这是否是设计使然,而是文件系统的产物。

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

您可以通过对结果调用 sort 来减轻影响,例如:

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

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

 files = Dir.glob("./*").sort {|a,b| a.upcase <=> b.upcase}
于 2011-04-03T13:51:12.127 回答
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),返回结果的顺序也是如此。

于 2020-08-12T12:56:51.227 回答