Is there an easy way in Ruby to find a canonical file path out of a messy file path?
For example:
a/b/../c/x
is the same as a/c/x
a/./b/c/x
is the same as a/b/c/x
a/./b/../../c/x
is the same as c/x
Any simple way to do this?
require 'pathname'
Pathname.new("a/b/../c/x").cleanpath
File.expand_path (file_name [, dir_string]) → abs_file_name
Преобразует путь в абсолютный путь. Относительные пути ссылаются на текущий рабочий каталог процесса, если не указана dir_string, и в этом случае он будет использоваться в качестве отправной точки. Указанный путь может начинаться с ~
, который расширяется до домашнего каталога владельца процесса (переменная среды HOME
должна быть установлена правильно). ~ пользователь
расширяется до домашнего каталога указанного пользователя.
File.expand_path("~oracle/bin") #=> "/home/oracle/bin"
File.expand_path("../../bin", "/tmp/x") #=> "/bin"