Ruby中的规范文件路径

29

在Ruby中,有没有一种简单的方法可以从一个混乱的文件路径中找到规范的文件路径?

例如:

  • a/b/../c/x 等同于 a/c/x
  • a/./b/c/x 等同于 a/b/c/x
  • a/./b/../../c/x 等同于 c/x

有没有简单的方法实现这个功能呢?

2个回答

38
require 'pathname'

Pathname.new("a/b/../c/x").cleanpath

2
如果您想要同时摆脱符号链接(例如Qt的canonicalFilePath),那么请使用realpath而不是cleanpath - Erik Sandberg
3
@Erik 你应该知道,与 cleanpath 不同,realpath 访问文件系统并在路径不存在时失败。 - hagello

32

File.expand_path(file_name [, dir_string] ) → abs_file_name

将文件路径名转换为绝对路径名。如果未提供dir_string,则相对路径是从进程的当前工作目录引用的,否则会将其用作起始点。给定的路径名可能以~开头,它会扩展为进程所有者的主目录(必须正确设置环境变量HOME)。~user会扩展为指定用户的主目录。

File.expand_path("~oracle/bin")           #=> "/home/oracle/bin"
File.expand_path("../../bin", "/tmp/x")   #=> "/bin"

如果你不需要波浪线扩展,可以使用File.realpath代替。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接