2009-08-06 13 views
43

Ho una stringa contenente il percorso del file system a un collegamento simbolico esistente. Voglio ottenere il percorso a cui questo link punta.Come ottengo la destinazione di un collegamento simbolico?

Fondamentalmente voglio lo stesso che avrei avuto con questo po 'di aggiustamenti:

s = "path/to/existing/symlink" 
`ls -ld #{s}`.scan(/-> (.+)/).flatten.last 

ma voglio farlo senza sborsare.

+0

Per inciso, in bash è anche solo 'readlink path/to/symlink'. Non analizzare mai l'output di 'ls'. – OrangeDog

risposta

60

Credo readlink è quello che state cercando:

File.readlink("path/to/symlink") 
+13

Si noti che se il collegamento simbolico è relativo o esiste una catena di collegamenti simbolici, questo non seguirà tutti i collegamenti o restituirà il percorso completo -Pathname # willpath. – mfazekas

+0

@mfazekas, grazie per averlo indicato; Mi chiedo se sia davvero ciò che l'OP voleva; 'ls -ld ...' non dà il vero percorso neanche. – Inshallah

43
require 'pathname' 
Pathname.new("symlink").realpath 

o readlink come altri hanno detto

+3

piuttosto Pathname.new ("/ percorso/a/symlink"). Realpath.to_s :) .. questo è decisamente meglio di usare system() –

10

Oppure si può provare:

File.realpath("symlink_path") 

che lavora per entrambi i collegamenti simbolici e file normali.

+0

necessario attenersi a 'readpath' se si desidera 1.8.7 compatibilità – nhed

Problemi correlati