rubyでフォルダ構造維持しながらファイルをコピー

rubyでフォルダ構造維持しながらファイルをコピーする
xcopyみたいな形で第2引数に第1引数のディレクトリ以下のファイルをコピーする
第2引数のフォルダがなかったら作る

src,dest=ARGV[0]||"a",ARGV[1]||"a_dash"
Dir.exist?(dest)||Dir.mkdir(dist)
Dir.glob("#{src}/**/*"){|s|
  d=s.sub(/#{src}/,dest)
  puts s,d
  File.ftype(s)=="directory" ? Dir.mkdir(d) : `cp #{s} #{d}`
}

まあ、このまま使うことは無いだろうからcpの部分は適宜編修する このままならcp -r の方が速い



実験データは以下のように用意した

$ mkdir -p a/b/c a/d a/e/f/g a/f/h
$ touch a/A a/b/B a/b/c/C a/d/D a/e/E a/e/f/F a/f/h/H
$ ls -R
.:
a

./a:
A  b  d  e  f

./a/b:
B  c

./a/b/c:
C

./a/d:
D

./a/e:
E  f

./a/e/f:
F  g

./a/e/f/g:

./a/f:
h

./a/f/h:
H