Ruby中的规范文件路径

Jul*_*oux 22 ruby path

Ruby中是否有一种简单的方法可以从凌乱的文件路径中找到规范的文件路径?

例如:

  • a/b/../c/x 是相同的 a/c/x
  • a/./b/c/x 是相同的 a/b/c/x
  • a/./b/../../c/x 是相同的 c/x

有什么简单的方法吗?

Ken*_*oom 31

require 'pathname'

Pathname.new("a/b/../c/x").cleanpath
Run Code Online (Sandbox Code Playgroud)

  • `require'pathname.rb'` (4认同)
  • 如果你想摆脱符号链接(比如Qt的`canonicalFilePath`)那么使用`realpath`而不是`cleanpath`. (2认同)
  • @Erik你应该知道`realpath`,与`cleanpath`不同,访问文件系统,如果路径不存在则失败. (2认同)

Mat*_*ggs 22

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

将路径名转换为绝对路径名.除非给出dir_string,否则从进程的当前工作目录引用相对路径,在这种情况下,它将用作起始点.给定的路径名​​可以以a开头~,扩展到进程所有者的主目录(HOME必须正确设置环境变量).~user扩展到指定用户的主目录.

File.expand_path("~oracle/bin")           #=> "/home/oracle/bin"
File.expand_path("../../bin", "/tmp/x")   #=> "/bin"
Run Code Online (Sandbox Code Playgroud)