2012-07-11 19 views
35

Rubyを使用して、の内容を別のディレクトリのにコピーするにはどうすればよいですか?あるディレクトリの内容を別のディレクトリにコピー

A/ 
    bar 
    foo 
B/ 
    bar 
    foo 
    jam 
    jim 
コピーしたディレクトリので、私は FileUtils.cp_rを使用することはできません

:私は、その結果、Bにからすべてをコピーする

A/ 
    bar 
    foo 
B/ 
    jam 
    jim 

:例えば、(空でない)ディレクトリAとB与えられましたそれ自体:

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

答えて

38

:ような何かを試してみてください。

以下のRuby docの例。現在の作業ディレクトリが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

+1

CasualCoderとBTAによって答えはあなたが共通の宛先にコピーするファイルのリストを持っているときのために優れているが、これは本当に最高の答えです。 (最低限のタイピング、最低限のメソッド呼び出し)ドキュメントを完全に読むための良い仕事。 – Phrogz

28

試してみてください。

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

FileUtils.cp_rを使用して、最初の引数はまた、ファイルのリストであることに注意してください。単にソースディレクトリパラメータの最後に/.を追加し、FileUtilのcp_rメソッドを使用して

FileUtils.cp_r(Dir.glob('A/*'), 'B') 
関連する問題