Канонический путь к файлу в Ruby - PullRequest
21 голосов
/ 17 августа 2010

Есть ли в Ruby простой способ найти канонический путь к файлу из грязного пути к файлу?

Например:

  • a/b/../c/x совпадает с a/c/x
  • a/./b/c/x совпадает с a/b/c/x
  • a/./b/../../c/x совпадает с c/x

Есть ли простой способ сделать это?

Ответы [ 2 ]

30 голосов
/ 17 августа 2010
require 'pathname'

Pathname.new("a/b/../c/x").cleanpath
22 голосов
/ 17 августа 2010

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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...