【问题标题】:Ruby moving directory error:Ruby 移动目录错误:
【发布时间】:2012-10-20 18:09:41
【问题描述】:

我有一个包含许多子目录的目录,每个子目录都包含要测试的不同版本的程序。

all_dirs.each do |dir|
  FileUtils.mv(test_spec, target_dir, :verbose => true)
  system("rspec #{test_folder_name}")
  puts "moving back: '#{spec_dir}' to '#{current_dir}'"
  FileUtils.mv(spec_dir, current_dir, :verbose => true)
end

在大多数情况下代码是成功的,但有时它拒绝将目录移动到父目录,因为它已经存在。

mv ~/test/version-1/01-spec ~/test
~/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/fileutils.rb:509:in `block in mv': File exists - ~/test (Errno::EEXIST)
        from ~/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/fileutils.rb:1423:in `block in fu_each_src_dest'
        from ~/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/fileutils.rb:1437:in `fu_each_src_dest0'
        from ~/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/fileutils.rb:1421:in `fu_each_src_dest'
        from ~/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/fileutils.rb:504:in `mv'

unix mv 命令有效,抛出该异常后可以执行。我做错了吗?

【问题讨论】:

    标签: ruby ruby-1.9


    【解决方案1】:

    正如错误告诉你的那样,它失败了,因为~/test 已经存在,而FileUtils 默认不会破坏它。如果你不关心覆盖,你可以传递force参数:

    FileUtils.mv(test_spec, target_dir, :verbose => true, :force => true)
    

    【讨论】:

    • 为什么会随机失败?它可以执行 5 次迭代,然后在第 6 次失败
    • @Tombart:来自 file_utils 源 (github.com/ruby/ruby/blob/trunk/lib/fileutils.rb#L583),当目标条目是目录时,您可能会看到这一点。具体哪5个成功,哪1个抛出错误?
    • :force 不能解决它,但是当我运行 system("mv", spec_dir, current_dir) 时就可以了。我在运行ruby-1.9.3-p194,所以代码可能与头部版本略有不同
    猜你喜欢
    • 2014-03-25
    • 1970-01-01
    • 2018-04-13
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 2016-02-11
    • 1970-01-01
    相关资源
    最近更新 更多