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