我不是 Ruby 人,但我被指派修改我们的构建脚本。该脚本正在尝试移动(重命名)文件,但我不确定为什么会出现错误。我已经添加:force => true
了我认为如果它存在的话会覆盖文件的内容。我在 OSX 上运行这个脚本。
FileUtils.mv(var1, var2, {:force => true, :verbose => true})
结果:
ERROR -- : same file: filename1.txt and Filename1.txt
ERROR -- : ["/opt/local/lib/ruby/1.8/fileutils.rb:1396:in `fu_each_src_dest'",
"/opt/local/lib/ruby/1.8/fileutils.rb:1413:in `fu_each_src_dest0'",
"/opt/local/lib/ruby/1.8/fileutils.rb:1395:in `fu_each_src_dest'",
"/opt/local/lib/ruby/1.8/fileutils.rb:495:in `mv'"
所以我做了一些挖掘,发现这个错误是在哪里抛出的:
# File lib/fileutils.rb, line 1512
def fu_each_src_dest(src, dest) #:nodoc:
fu_each_src_dest0(src, dest) do |s, d|
raise ArgumentError, "same file: #{s} and #{d}" if fu_same?(s, d)
yield s, d, File.stat(s)
end
end
这条线是否会抛出ArgumentError
何时if fu_same?(s, d)
返回 true?或者这是否意味着相反?
更新 问题是文件系统不区分大小写,因此它将两个文件名视为“相同文件”。附带说明一下,OSX 文件系统可以设置为区分大小写。