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

Phr*_*ogz 41 ruby

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

A/
  bar
  foo
B/
  jam
  jim
Run Code Online (Sandbox Code Playgroud)

我想将A中的所有内容复制到B中,从而导致:

A/
  bar
  foo
B/
  bar
  foo
  jam
  jim
Run Code Online (Sandbox Code Playgroud)

我无法使用,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"]
Run Code Online (Sandbox Code Playgroud)

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

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

the*_*ore 47

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

以下Ruby doc的示例.假设当前工作目录有src和dest目录.

 FileUtils.cp_r 'src/.', 'dest'
Run Code Online (Sandbox Code Playgroud)

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


Cas*_*der 30

尝试:

FileUtils.cp_r(Dir['A/*'],'B')
Run Code Online (Sandbox Code Playgroud)


bta*_*bta 16

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

FileUtils.cp_r(Dir.glob('A/*'), 'B')
Run Code Online (Sandbox Code Playgroud)