ruby - 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 年内是否对标准库进行了有关此问题的任何修改。
解决方案
我已经阅读了很多文档,还有关于 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
但这没有什么区别。
推荐阅读
- python - 如何使用 CFS_Config 文本文件创建路径目录以在 python 中自动生成文本文件?
- pyspark - Spark:如何根据不同的列使新列的值
- php - 为什么我们不在 Hadoop 框架中使用 php?
- c# - 异步本地
- 跨等待但不是新任务复制的功能 - asp.net - .Net Core 中的 Firebase 身份验证
- wpf - 为 MenuItem VB 设置图标
- regex - XSLT 问题:属性值的正则表达式
- angular - 使用它时,Angular 6“不是函数”。在另一个函数内部
- java - 如何安排每个月运行的方法并创建凭证文件?
- file - 由于文件权限问题,RemoveAll() 不应该工作