2010-08-17 19 views
20

¿Hay alguna manera fácil en Ruby para encontrar una ruta de archivo canónica de una ruta de archivo desordenada?Ruta del archivo canónico en Ruby

Por ejemplo:

  • a/b/../c/x es lo mismo que a/c/x
  • a/./b/c/x es lo mismo que a/b/c/x
  • a/./b/../../c/x es la misma que c/x

Cualquier forma sencilla de hacer esto?

Respuesta

27
require 'pathname' 

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

'requerir 'pathname.rb'' – JellicleCat

+2

Si desea deshacerse de enlaces simbólicos también (como' canonicalFilePath' de Qt) y luego usar 'realpath' en lugar de' cleanpath'. –

+2

@Erik Debe tener en cuenta que 'realpath', a diferencia de' cleanpath', accede al sistema de archivos y falla si la ruta no existe. – hagello

20

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

Convierte un nombre de ruta para una ruta absoluta. Las rutas relativas se referencian desde el directorio de trabajo actual del proceso a menos que se indique dir_string, en cuyo caso se utilizará como punto de partida. El nombre de ruta dado puede comenzar con un ~, que se expande al directorio de inicio del propietario del proceso (la variable de entorno HOME debe estar configurada correctamente). ~user se expande al directorio de inicio del usuario nombrado.

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