2012-07-11 18 views
35

Mit Ruby, wie kann ich die Inhalte von einem Verzeichnis zu einem anderen kopieren?Inhalt eines Verzeichnisses in ein anderes kopieren

A/ 
    bar 
    foo 
B/ 
    jam 
    jim 

Ich möchte alles von A nach B kopieren, was zu: Zum Beispiel (nicht leer) Verzeichnisse A und B gegeben

A/ 
    bar 
    foo 
B/ 
    bar 
    foo 
    jam 
    jim 

ich nicht FileUtils.cp_r weil es kopiert das Verzeichnis verwenden kann selbst:

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

Gibt es eine bessere (kürzere, effizientere) Antwort als die folgenden?

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

Antwort

38

Mit FileUtil der cp_r Methode, fügen Sie einfach /. am Ende des Quellverzeichnis Parameter.

Beispiel von Ruby doc unten. Nimmt ein aktuelles Arbeitsverzeichnis mit src & Zielverzeichnissen an.

FileUtils.cp_r 'src/.', 'dest' 

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

+1

Während die Antworten von CasualCoder und BTA ausgezeichnet sind, wenn Sie haben eine Liste von Dateien auf ein gemeinsames Ziel zu kopieren, ist dies wirklich die beste Antwort. (Am wenigsten tippen, am wenigsten Methodenaufrufe.) Gut, um die Dokumentation vollständig zu lesen. – Phrogz

28

Versuchen:

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

Wenn FileUtils.cp_r verwenden, beachten Sie, dass das erste Argument auch eine Liste von Dateien sein kann. Versuchen Sie so etwas wie:

FileUtils.cp_r(Dir.glob('A/*'), 'B') 
Verwandte Themen