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

时间:2021-01-16 20:56:14

标签: ruby file 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? 提出的。答案有点神秘,我想知道自发布该问题以来的十二年中是否对标准库进行了有关此问题的任何修改。

1 个答案:

答案 0 :(得分:1)

我已经阅读了很多文档,还有关于 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

但这没什么区别。