Para usar en un script de shell, estoy buscando una forma de línea de comandos para obtener el destino de un enlace simbólico. Lo más cerca que he llegado hasta ahora es stat -N src
, qué salidas src -> dst
. Por supuesto, podría analizar la salida y obtener dst
, pero me pregunto si hay alguna forma directa de obtener el destino.
command-line
symlink
gerrit
fuente
fuente
readlink -f
si desea conocer el último objetivo del enlace simbólico y no solo el siguiente .-f
es una extensión no portátil de GNUreadlink
.En Mac OS X y FreeBSD / NetBSD / etc. sus:
Más genéricamente supongo que la solución es (stat --printf =% N usa comillas extrañas):
Ejemplo:
Otro método es:
La última línea está destrozada porque no tiene nueva línea, pero está bien si necesita el resultado en una variable, como así
Se
-maxdepth
necesita para evitarfind
descender a directorios sib
resulta ser un directorio.fuente
stat --printf='%N\n'
es exactamente lo que quiero, las citas extrañas no me molestan, sus mismas citas rm y lnlink -> dest
en la salida. La solución find (1) debe verificarse si es con GNU findutils o de lo contrario ...echo $f
ciertamente no produce lo que espera cuando el enlace simbólico apunta a/*
(sí, es posible)Esto se puede hacer usando GNU
find
:find src -prune -printf "%l\n"
.fuente
Portablemente: sin suerte, excepto el uso de heurística para analizar la salida ls -l, o usar
perl -le 'print readlink("some-file")'
algunos sistemas tienen un
readlink
comando, algunos con una-f
opción para obtener la ruta absoluta.Hay varias implementaciones de un
stat
comando como envoltorio para las llamadasstat
/lstat
system. El GNU uno no es útil en ese sentido, pero el incorporado de zsh lo es más:Aún con zsh, puede obtener la ruta absoluta de un archivo (elimina todos los componentes de enlace simbólico) con el
:A
modificador (se aplica a la expansión variable, la expansión del historial y el globbing:fuente
En un sistema donde no tengo
readlink
o tengostat
comandos pero tengo Python 2.x, estoy usando un script corto:Tenga en cuenta que, a diferencia de
readlink -f
esto, solo puede seguir un nivel de enlace simbólico.fuente
Realpath portátil puro de Bash
fuente
realpath
comando delcoreutils
paquete,como se vincula en
readlink
la página del manual de comandos.por ejemplo:
salidas
en mi maquina
fuente