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 に答える