带有强制标志的Ruby FileUtils.mv不起作用

时间:2013-07-04 00:49:55

标签: ruby

我不是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返回true时,此行是否抛出if fu_same?(s, d)?或者这是否相反?

更新 问题是文件系统不区分大小写,因此它将两个文件名视为“相同文件”。另外,OSX文件系统可以设置为区分大小写。

1 个答案:

答案 0 :(得分:4)

FileUtils.mv :force => true似乎符合您的预期是正确的,但我认为您误读了错误消息。它似乎在告诉您var1 == var2var1应该是现有路径,而var2应该是(不同的)目的地