2012-07-11 20 views
35

Ruby'yi kullanarak, bir dizinin içeriğini içeriğini başka bir dizine nasıl kopyalarım?Bir dizinin içeriğini başka bir bilgisayara kopyalayın

A/ 
    bar 
    foo 
B/ 
    jam 
    jim 

ben sonuçlanan B içine A'dan şeyi kopyalamak istediğiniz: Örneğin, (boş olmayan) dizinleri A ve B verilmiştir

A/ 
    bar 
    foo 
B/ 
    bar 
    foo 
    jam 
    jim 

Ben FileUtils.cp_r kullanamaz o kopya dizin çünkü kendisi:

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"] 

aşağıdaki daha iyi (daha kısa, daha verimli) cevabı var mı?

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

cevap

38

: Böyle bir şey deneyin.

Aşağıdaki Ruby belgesinden örnekler. Src & dest dizinleri ile geçerli bir çalışma dizinini varsayar.

FileUtils.cp_r 'src/.', 'dest' 
CasualCoder ve BTA tarafından cevaplar ortak hedefe kopyalamak için dosyaların bir listesini olduğunda mükemmel olmakla birlikte

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

+1

, bu gerçekten iyi cevaptır. (En az yazım, en az yöntem çağrısı.) Belgeleri tam olarak okumak için iyi bir iş. – Phrogz

28

Dene:

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

FileUtils.cp_r kullanarak, ilk argüman da dosyaların bir listesi olabilir unutmayın. basitçe kaynak dizin parametresi sonunda /. ekleyin FileUtil en cp_r yöntemi kullanarak

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