【问题标题】:How do I move a file with Ruby?如何使用 Ruby 移动文件?
【发布时间】:2010-09-29 00:42:07
【问题描述】:

我想用 Ruby 移动一个文件。我该怎么做?

【问题讨论】:

    标签: ruby file


    【解决方案1】:

    FileUtils.move

    require 'fileutils'
    FileUtils.move 'stuff.rb', '/notexist/lib/ruby'
    

    【讨论】:

    • +1 请注意,.move 是 .mv 的别名,因此您应该也可以使用 FileUtils.mv。
    • 谢谢,比起.mv,我更喜欢.move。 :)
    • 我没有。 mv 让我感觉就像在我心爱的控制台中;)
    • Ruby 的优点在于它同时具有movemv,因此可以选择其中一个。 :)
    • 应该是require "fileutils"(没有大写)
    【解决方案2】:

    你可以像这样移动你的文件

    Rails.root.join('foo','bar')

    【讨论】:

    • 这就是“如何构建相对于 Rails 项目的根目录的路径/文件名?”问题的答案。它不会移动任何东西。
    【解决方案3】:

    这是一个模板。

     src_dir = "/full_path/to_some/ex_file.txt"
    
     dst_dir = "/full_path/target_dir"
    
     #Use the method below to do the moving
     move_src_to_target_dir(src_dir, dst_dir)
    
    
    
     def archive_src_to_dst_dir(src_dir, dst_dir)
    
         if File.exist ? (src_dir)
    
         puts "about to move this file:  #{src_dir}"
    
         FileUtils.mv(src_dir, dst_dir)
     else
    
         puts "can not find source file to move"
    
     end
     end
    

    【讨论】:

      【解决方案4】:

      【讨论】:

      • 这就是为什么我们应该发布答案,然后提供信用/资源链接。
      【解决方案5】:

      一个老问题,我很惊讶没有人回答这个简单的解决方案。您不需要 fileutils 或系统调用,只需将文件重命名到新位置即可。

      File.rename source_path, target_path
      

      愉快的编码

      【讨论】:

      • 文件重命名不能跨分区工作,并抛出错误“无效的跨设备链接”。在这些情况下,FileUtils 是更好的选择,但对于在同一分区中的简单移动,重命名有效。
      • @d3vkit,感谢您的评论,但在 Windows 中,这适用于本地和远程驱动器,例如 File.rename 'c:/test/test.txt', 'e:/test .txt',你用的是什么操作系统?
      • 啊,我在 Ubuntu 中使用某些 Windows 网络共享时遇到了麻烦。我最后也遇到了 FileUtils.mv 的问题,它会移动文件,然后说它没有删除旧文件的权限。我最终使用 FileUtils.cp 然后 File.delete 来删除旧文件。
      • 这在 linux 上绝对不能跨分区工作。我想这取决于底层的操作系统 API。可以肯定的是,只需使用FileUtils.mv
      • 请注意,在某些情况下,您可能想要限制到同一个分区,就像我现在正在做的那样确保原子操作。
      【解决方案6】:

      您可以使用 FileUtils 来执行此操作。

      #!/usr/bin/env ruby
      
      require 'fileutils'
      
      FileUtils.mv('/tmp/your_file', '/opt/new/location/your_file')
      

      记住;如果您要跨分区移动,“mv”会将文件复制到新目标并取消链接源路径。

      【讨论】:

      • 我忘了补充一点,你不能跨分区移动。谢谢。
      • 其实 mv 为你做副本。 “将文件 src 移动到 dest。如果文件和 dest 存在于不同的磁盘分区上,则改为复制文件。” ...ruby-doc.org/core/classes/FileUtils.html#M004330
      • 能否确认文件从不同分区复制后是否被删除?
      猜你喜欢
      • 1970-01-01
      • 2020-01-30
      • 2023-03-17
      • 2013-03-08
      • 2013-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      相关资源
      最近更新 更多