2010-08-17 4 views
20

Existe-t-il un moyen simple dans Ruby de trouver un chemin de fichier canonique à partir d'un chemin de fichier désordonné?Chemin du fichier canonique dans Ruby

Par exemple:

  • a/b/../c/x est le même que a/c/x
  • a/./b/c/x est le même que a/b/c/x
  • a/./b/../../c/x est le même que c/x

De toute façon simple de le faire?

Répondre

27
require 'pathname' 

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

'require « pathname.rb'' – JellicleCat

+2

Si vous voulez vous débarrasser de liens symboliques aussi (comme 'canonicalFilePath' de Qt) puis utilisez' 'realpath' au lieu de cleanpath'. –

+2

@Erik Vous devez savoir que 'realpath', contrairement' cleanpath', accède au système de fichiers et échoue si le chemin n'existe pas. – hagello

20

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

Convertit un chemin d'accès à un chemin absolu. Les chemins relatifs sont référencés à partir du répertoire de travail courant du processus, sauf si dir_string est indiqué, auquel cas il sera utilisé comme point de départ. Le chemin d'accès donné peut commencer par un ~, qui se développe dans le répertoire de base du propriétaire du processus (la variable d'environnement HOME doit être définie correctement). ~user se développe dans le répertoire de base de l'utilisateur nommé.

File.expand_path("~oracle/bin")   #=> "/home/oracle/bin" 
File.expand_path("../../bin", "/tmp/x") #=> "/bin"