# Test-> a.plcómo obtener la ruta absoluta para el archivo symlink?
my $file = '/home/joe/test';
if (-f $file && -l $file) {
print readlink($file) ;
}
cómo obtener la ruta absoluta para el archivo de enlace simbólico?
# Test-> a.plcómo obtener la ruta absoluta para el archivo symlink?
my $file = '/home/joe/test';
if (-f $file && -l $file) {
print readlink($file) ;
}
cómo obtener la ruta absoluta para el archivo de enlace simbólico?
Cwd proporciona dicha funcionalidad mediante abs_path.
#!/usr/bin/perl -w
use Cwd 'abs_path';
my $file='/home/joe/test';
if(-f $file && -l $file) {
print abs_path($file);
}
Cuidado, que probablemente saldrá mal cuando los nombres de archivo UTF-8 estén en uso. En ese caso, puede ser necesario algo como 'Encode :: decode_utf8 (Cwd :: abs_path ($ file));' –
si utiliza File :: Spec rel2abs junto con readlink que obtendrá el camino abs incluso si es un enlace simbólico a otro enlace simbólico
use File::Spec;
$path = File::Spec->rel2abs(readlink($file)) ;
File :: Spec rel2abs no parece funcionar con múltiples enlaces. El abs_path de Cwd funciona. Pruebe 'touch/tmp/target; ln -s target/tmp/link1; ln -s link1/tmp/link2' y comparar 'perl -MFile :: Spec -e '$ f ="/tmp/link2 "; print "$ f:", Archivo :: Spec-> rel2abs (readlink ($ f)), "\ n" ''con' perl -M'Cwd "abs_path"' -e '$ f = "/ tmp/link2 "; print "$ f:", abs_path ($ f), "\ n" '' – mivk
Gracias por probar que especificar enlaces suaves sin el prefijo de ruta cuando no está en el mismo directorio va a romper cosas y es, por lo tanto, un mal que hacer ;-) – iain
¿Debo señalar también que el OP solicitó la ["ruta absoluta del archivo al que apunta el enlace simbólico"] (http://stackoverflow.com/questions/4887672/how-to-get- the-absolute-path-for-symlink-file # comment-5437184) y * not * la ruta canónica (que es una ruta absoluta pero _no necesariamente_ el archivo solicitado)? – iain
¿Estás diciendo que desea que la ruta absoluta del enlace simbólico o la ruta absoluta del archivo de los puntos de enlace simbólico a? – iain
ruta absoluta del archivo, el enlace simbólico apunta a – Tree
Entonces, en realidad solo quieres saber cómo obtener la ruta absoluta para un nombre de ruta dado, porque ya sabes cómo usar 'readlink()' para obtener un camino al apuntado-a archivo. –