首页 > 解决方案 > Ruby 的 Dir.glob 不遵循符号链接

问题描述

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

例如,~is on /dev/sda1,而~/work是指向 on 目录的链接/dev/sda2

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

有没有办法可以glob包含~/work文件?

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

标签: rubyfileglob

解决方案


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

但这没有什么区别。


推荐阅读