2010-08-17 79 views
20

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

例如:

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

任何简单的方法来做到这一点?

回答

27
require 'pathname' 

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

'需要“pathname.rb'' – JellicleCat 2012-03-06 17:11:42

+2

如果你想摆脱符号链接的太(如Qt的'canonicalFilePath'),然后使用'realpath',而不是'cleanpath'。 – 2014-02-19 01:04:40

+2

@Erik你应该知道'realpath'不像'cleanpath',访问文件系统,如果路径不存在则失败。 – hagello 2015-05-22 09:03:44

20

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"