soporta sistema simbólicos simbólico simbolico permiten para links link fuertes enlaces enlace eliminar editar duros directorios crear como comando borrar archivos bash symlink

bash - sistema - links simbólicos



¿Cómo puedo eliminar los enlaces simbólicos en bash? (2)

Esta pregunta ya tiene una respuesta aquí:

¿Cómo puedo tomar una ruta determinada en bash y convertirla en su forma canónica, eliminando referencias de enlaces simbólicos que puedan estar contenidos dentro de la ruta?

Por ejemplo:

~$ mkdir /tmp/symtest ~$ cd /tmp/symtest/ /tmp/symtest$ mkdir -p foo/bar cat/dog /tmp/symtest$ cd foo/bar/ /tmp/symtest/foo/bar$ ln -s ../../cat cat /tmp/symtest/foo/bat$ cd ../../ /tmp/symtest$ tree . |-- cat | `-- dog `-- foo `-- bar `-- cat -> ../../cat 6 directories, 0 files

¿Cómo puedo obtener la ruta canónica completa de /tmp/symtest/foo/bar/cat (es decir: /tmp/symtest/cat )?


Aquí hay una función que resolverá los enlaces simbólicos
Su propósito original es resolver la ruta completa al script de llamada apuntado por un enlace simbólico / usr / bin

# resolve symbolic links function resolve_link() { local LINK_FILE=${1:-${BASH_SOURCE[0]}} local FILE_TYPE=`file $LINK_FILE | awk ''{print $2}''` local LINK_TO=$LINK_FILE while [ $FILE_TYPE = "symbolic" ]; do LINK_TO=`readlink $LINK_FILE` FILE_TYPE=`file $LINK_TO | awk ''{print $2}''` done echo $LINK_TO } BASH_SOURCE_RESOLVED=$(resolve_link) echo $BASH_SOURCE_RESOLVED

No usa recursividad pero nunca he usado recursión en bash


Gracias a Andy Skelton , parece que la respuesta es readlink -f :

$:/tmp/symtest$ readlink -f /tmp/symtest/foo/bar/cat /tmp/symtest/cat