【问题标题】:Ruby's Dir.glob does not follow symbolic linksRuby 的 Dir.glob 不遵循符号链接
【发布时间】:2021-01-16 20:56:14
【问题描述】:

我有 ~/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? 提出的。那里的答案有点神秘,我想知道自该问题发布以来的 12 年内是否对标准库进行了有关此问题的任何修改。

【问题讨论】:

  • 你见过 stackoverflow.com/questions/357754/…> 吗?
  • 谢谢。是的,我在发布后找到了它,并正在考虑删除这个问题。重新措辞询问自 12 年前该帖子以来是否有任何关于此问题的语言补充是否合法?我已修改问题以包含此内容。
  • 作为一种解决方法,我可以只使用find -L 或Ruby 的Dir.glob。这将遵循符号链接,并且默认情况下还包括隐藏目录中的文件(例如.rvm!)。不幸的是,这将无法移植到 Windows。
  • 顺便说一下,我已经在 Ruby 论坛bugs.ruby-lang.org/issues/17548 发布了一个功能请求。

标签: ruby file glob


【解决方案1】:

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

我创建了一个指向外部磁盘上子目录的符号链接,其中包含 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

但没有区别。

【讨论】:

    猜你喜欢
    • 2015-11-06
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-17
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    相关资源
    最近更新 更多