微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Ruby 的 Dir.glob 不遵循符号链接

如何解决Ruby 的 Dir.glob 不遵循符号链接

我有 ~/work 使用符号链接 (ln -s...) 指向另一个分区上的目录。

例如,~ 位于 /dev/sda1,而 ~/work 是指向 /dev/sda2 上的目录的链接

Dir.glob('**','*rb') 返回的数组不包含 ~/work 中的任何文件

有没有办法让 glob 包含 ~/work文件

BernardK 在评论中指出这个问题是在 Can I traverse symlinked directories in Ruby with a "**" glob? 提出的。答案有点神秘,我想知道自发布该问题以来的十二年中是否对标准库进行了有关此问题的任何修改

解决方法

我已经阅读了很多文档,还有关于 shell glob、Dir.glob 的源代码,但没有找到任何令人满意的答案(其中包括 doc1 doc2 doc3 doc4 doc5).

我创建了一个指向外部磁盘子目录的符号链接,其中包含 11 个 rb 文件。然后我 cd 到某个包含子目录、ruby 脚本和符号链接的目录。

Dir.glob("**/*.rb") 列出了它们包含的 122 个文件,不遵循符号链接。

Dir.glob("**/*/**/b") 给出 0 个文件。

Dir.glob("**{,/*/**}/*.rb") 给出了 255 个文件,是 122 + 11 的两倍,链接如下。

最后我偶然发现:Dir.glob("**/*/**/*.rb") 给出了 133 个文件,符号链接在后面。

我也试过

include File::Constants
d = Dir.glob("**/*/**/*.rb",File::NOFOLLOW)
print 'd size ',d.size; puts
puts d

但这没什么区别。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。