山本です。

Dir.globの順序が規定されていれば、下のようにできて便利ですね。

Dir.glob("s:/**/*", Dir.GLOB_POSTORDER) do |path|
    if File.directory?(path)
        Dir.delete(path)
    else
        File.delete(path)
    end
end

Dir.glob("s:/**/*") do |path|
    dest = "f:/" + path[3...path.size]
    if File.directory?(path)
        Dir.mkdir(dest)
    else
        copy(path, dest) # ファイルのコピーを実装
    end
end

もしも **/ とシンボリックリンクのチェックがタイムリーでなくていいのなら、
上からマッチする順が下からマッチする順と同様に高速で、
デフォルトが上からマッチなので互換性も取れて、
Win32のパッチも今のままで問題なくなって、
なかださんのパッチでよさそうなんですけど、どうなんでしょうか。
(ただ、_WIN32のコードは外にだせるかも)

Dir.glob("hoge/**/*") do |path|
    # path のディレクトリを削除
    # path にディレクトリへのシンボリックリンクを作成
end

みたいなコードを走らせた場合にとんでもないことになりそうなのが
怖いんですが・・・