【问题标题】:Copy contents of one directory to another将一个目录的内容复制到另一个目录
【发布时间】:2014-09-26 05:23:17
【问题描述】:

使用 Ruby,如何将一个目录的 内容 复制到另一个目录?例如,给定(非空)目录 A 和 B:

A/
  bar
  foo
B/
  jam
  jim

我想将 A 中的所有内容复制到 B 中,结果是:

A/
  bar
  foo
B/
  bar
  foo
  jam
  jim

我不能使用FileUtils.cp_r,因为它会复制目录本身:

irb(main):001:0> require 'fileutils'
#=> true
irb(main):002:0> Dir['**/*']
#=> ["A", "A/bar", "A/foo", "B", "B/jam", "B/jim"]
irb(main):003:0> FileUtils.cp_r('A','B')
#=> nil
irb(main):004:0> Dir['**/*']
#=> ["A", "A/bar", "A/foo", "B", "B/A", "B/A/bar", "B/A/foo", "B/jam", "B/jim"]

是否有比以下更好(更短、更有效)的答案?

Dir['A/*'].each{ |f| FileUtils.cp(f,"B") }

【问题讨论】:

    标签: ruby


    【解决方案1】:

    使用 FileUtil 的cp_r 方法,只需在源目录参数末尾添加/.

    来自以下 Ruby 文档的示例。假设当前工作目录包含 src 和 dest 目录。

     FileUtils.cp_r 'src/.', 'dest'
    

    http://www.ruby-doc.org/stdlib-1.9.3/libdoc/fileutils/rdoc/FileUtils.html#method-c-cp_r

    【讨论】:

    • 虽然 CasualCoder 和 bta 的答案非常适合您将文件列表复制到一个共同的目标,但这确实是最好的答案。 (最少的打字,最少的方法调用。)完整阅读文档做得很好。
    【解决方案2】:

    试试:

    FileUtils.cp_r(Dir['A/*'],'B')
    

    【讨论】:

    • 虽然在这种情况下,不会自动创建目标目录。
    【解决方案3】:

    使用FileUtils.cp_r 时,请注意第一个参数也可以是文件列表。尝试类似:

    FileUtils.cp_r(Dir.glob('A/*'), 'B')
    

    【讨论】:

      猜你喜欢
      • 2011-09-07
      • 2014-07-18
      • 2020-09-06
      • 1970-01-01
      • 2012-10-12
      • 1970-01-01
      • 2011-01-04
      • 2013-01-11
      相关资源
      最近更新 更多