将一个目录的内容复制到另一个目录

时间:2012-07-11 15:59:03

标签: ruby

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

3 个答案:

答案 0 :(得分:45)

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

以下Ruby doc的示例。假设当前的工作目录是src&目录。

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

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

答案 1 :(得分:29)

尝试:

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

答案 2 :(得分:16)

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

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