2010-08-17 9 views
20

Gibt es einen einfachen Weg in Ruby, einen kanonischen Dateipfad aus einem unordentlichen Dateipfad zu finden?Kanonischer Dateipfad in Ruby

Zum Beispiel:

  • a/b/../c/x ist die gleiche wie a/c/x
  • a/./b/c/x ist die gleiche wie a/b/c/x
  • a/./b/../../c/x ist die gleiche wie c/x

Jede einfache Art und Weise, dies zu tun?

Antwort

27
require 'pathname' 

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

'require‚pathname.rb'' – JellicleCat

+2

Wenn auch Sie von Symlinks loswerden wollen (wie Qt 'canonicalFilePath') dann' statt 'cleanpath' realpath' verwenden. –

+2

@Erik Sie sollten beachten, dass 'realpath', anders als' cleanpath', auf das Dateisystem zugreift und fehlschlägt, wenn der Pfad nicht existiert. – hagello

20

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

einen Pfadnamen auf einen absoluten Pfadnamen umwandelt. Relative Pfade werden vom aktuellen Arbeitsverzeichnis des Prozesses referenziert, sofern nicht dir_string angegeben ist. In diesem Fall wird sie als Startpunkt verwendet. Der angegebene Pfadname kann mit einer ~ beginnen, die zum Basisverzeichnis des Prozesseigentümers erweitert wird (die Umgebungsvariable HOME muss korrekt festgelegt sein). ~user wird zum Home-Verzeichnis des angegebenen Benutzers erweitert.

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