42

使用 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") }
4

3 回答 3

53

使用 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

于 2014-09-25T21:23:17.813 回答
31

尝试:

FileUtils.cp_r(Dir['A/*'],'B')
于 2012-07-11T16:18:26.427 回答
17

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

FileUtils.cp_r(Dir.glob('A/*'), 'B')
于 2012-07-11T16:26:00.140 回答