2

我不是 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 文件系统可以设置为区分大小写。

4

1 回答 1

4

你是FileUtils.mv对的:force => true,似乎确实可以做到你所期望的,但是我认为你误读了错误信息。它似乎在告诉您,var1 == var2whilevar1应该是现有路径,并且var2应该是(不同的)目的地

于 2013-07-04T01:00:29.597 回答