ruby:使用链接取消引用递归复制目录

ruby:使用链接取消引用递归复制目录,ruby,Ruby,这很奇怪,我找不到Ruby的任何标准方法来递归复制一个目录,同时取消对符号链接的引用。我能找到的最好的方法是FindUtils.cp\r,但它只支持取消对根src目录的引用 copy\u条目是相同的,尽管文档错误地显示它有一个选项dereference。在源代码中,它是dereference\u root,并且它只会这样做 我也找不到一种标准的方法来递归到目录中。如果没有好的东西存在,我可以自己写一些东西,但我想要一些简单且经过测试可以跨Windows和Unix移植的东西 递归到目录的标准方法是

这很奇怪,我找不到Ruby的任何标准方法来递归复制一个目录,同时取消对符号链接的引用。我能找到的最好的方法是
FindUtils.cp\r
,但它只支持取消对根src目录的引用

copy\u条目
是相同的,尽管文档错误地显示它有一个选项
dereference
。在源代码中,它是
dereference\u root
,并且它只会这样做


我也找不到一种标准的方法来递归到目录中。如果没有好的东西存在,我可以自己写一些东西,但我想要一些简单且经过测试可以跨Windows和Unix移植的东西

递归到目录的标准方法是使用类,但我认为您必须编写一些东西。内置方法是正常操作的构建块,但您的需求并不正常

我建议看一下Ruby附带的类。它可以方便地使用遍历目录,查看文件的类型,并在必要时取消引用它。特别是,它将告诉您某个文件是否为软链接,并将解析该链接并返回实际文件的路径

例如,我的主目录中有一个从
.vim
vim
的软链接:

vim = Pathname.new ENV['HOME'] + '/.vim'
=> #<Pathname:/Users/ttm/.vim>
vim.realpath
=> #<Pathname:/Users/ttm/vim>

下面是我在ruby中实现的
find-follow

我本可以将它隔离到一个类或monkey patch Find中,但我决定将其作为一个自包含的方法。可能还有改进的余地,因为它不适用于jruby。如果有人有主意,我们欢迎

更新:了解为什么不使用jruby- 我会设法解决的。我实现了一个变通方法


更新2:现在
cp\r\u参考
methodready-

谢谢,我来试试。顺便说一句,这种用法在我看来是正常的。在windows wrold中可能没有,但在unix上,使用解引用链接进行复制是很正常的。我可以递归到dir中,并使用标准的FileUtils.cp with dereference选项来复制单个文件。谢谢.wrt prune方法,我想你可以直接使用
Find.prune
。我真的不喜欢猴子补丁,因为它在调试时增加了太多的复杂性。谢谢你的回答。我已经基于这些类实现了一些东西。
class Pathname
  def prune
    Find.prune
  end
end