Ruby无法stat含井号(#)的文件,求可行解决方案
问题解决:Ruby无法stat Dropbox的
.#格式临时符号链接 问题根源
核心差异在于Ruby的File.stat和Linux系统stat命令的默认行为:
- Linux系统
stat默认直接读取符号链接本身的元数据,不会解析链接指向的目标文件。 - Ruby的
File.stat默认会跟随符号链接,尝试读取链接指向的目标文件元数据。而Dropbox生成的.#NineFoxes.org是锁定用的临时符号链接,其目标是polar@fennec.3781:1659418908这类非本地真实存在的路径,因此File.stat会报错文件不存在。
解决方案
使用Ruby的File.lstat方法替代File.stat,lstat专门用于获取符号链接本身的元数据,不会跟随链接访问目标文件。
代码示例
# 获取符号链接自身的元数据 File.lstat('/home/bear/Dropbox/.#NineFoxes.org') # 处理Dir.glob返回的路径同样有效 x = Dir.glob('Dropbox/*.org', File::FNM_DOTMATCH) File.lstat(x[1])
执行后会得到和系统stat一致的符号链接信息,不会再触发Errno::ENOENT错误。
额外说明
如果需要获取符号链接的目标路径,可以使用File.readlink:
# 获取链接指向的内容 File.readlink('/home/bear/Dropbox/.#NineFoxes.org') # 输出:"polar@fennec.3781:1659418908"
内容的提问来源于stack exchange,提问作者Analog Moose
相关产品推荐
相关产品推荐

