Ruby FileUtils.rm_r 在存在指向目录的符号链接时在 Windows 上失败:替代方案?

Ruby FileUtils.rm_r fails on Windows when there are symlinks to directories: alternatives?

我支持适用于 OS X 和 Linux 的跨平台 ruby 2 脚本,但在 Windows 上尝试删除包含以下内容的树时失败目录符号链接。这是我在最简单的例子中看到的,来自 irb 的 运行。目录 "parent" 包含一个名为 "symlink" 的符号链接,它指向一个目标目录。目标存在。

irb(main):001:0> require 'fileutils'
=> true
irb(main):003:0> FileUtils.rm_r 'parent'
Errno::ENOENT: No such file or directory - parent/symlink
    from c:/engapps/Ruby/lib/ruby/2.0.0/fileutils.rb:1349:in `open'
    from c:/engapps/Ruby/lib/ruby/2.0.0/fileutils.rb:1349:in `entries'
    from c:/engapps/Ruby/lib/ruby/2.0.0/fileutils.rb:1349:in `entries'
    from c:/engapps/Ruby/lib/ruby/2.0.0/fileutils.rb:1536:in `postorder_traverse'
    from c:/engapps/Ruby/lib/ruby/2.0.0/fileutils.rb:1537:in `block in postorder_traverse'
    from c:/engapps/Ruby/lib/ruby/2.0.0/fileutils.rb:1536:in `each'
    from c:/engapps/Ruby/lib/ruby/2.0.0/fileutils.rb:1536:in `postorder_traverse'
    from c:/engapps/Ruby/lib/ruby/2.0.0/fileutils.rb:837:in `remove_entry'
    from c:/engapps/Ruby/lib/ruby/2.0.0/fileutils.rb:695:in `block in rm_r'
    from c:/engapps/Ruby/lib/ruby/2.0.0/fileutils.rb:691:in `each'
    from c:/engapps/Ruby/lib/ruby/2.0.0/fileutils.rb:691:in `rm_r'

除了 system('rmdir /s/q parent') 之类的解决方案之外,这里还有其他选择吗?我知道 FileUtils.symlink() 在 Windows 上不受支持,但是 FileUtils.rm_r() 的严重失败完全是另一回事。自从 Win 7 出现以来,这一直是一个问题,甚至可能回到 Vista,我还没有找到一个不涉及炮击的好解决方案 CMD.EXE.

注意:FileUtils.rm_rf() 不会改善事情。

我已经阅读了 ruby 2.0 中 fileutils.rb 的源代码,以及它所依赖的代码。从这个来源中可以清楚地看出,Windows 符号链接没有被考虑,尽管在这个模块中,Win32 的代码与非 Windows 的代码行为不同。 Ruby 似乎没有任何关于 Windows 符号链接的公开票,所以答案是,Ruby 不处理它,而且看起来不会很快处理.因此 system('rmdir /s/q parent') 解决方法是删除包含符号链接的 Windows 目录树。