2010-08-17 78 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"