Étant donné cet exemple:
mkdir a
ln -s a b
ln -s b c
ln -s c d
Si j'exécute:
ls -l d
Il montrera:
d -> c
Existe-t-il un moyen pour ls
ou toute autre commande linux d'afficher à la d -> c -> b -> a
place?
linux
shell
symbolic-link
Kalecser
la source
la source
Réponses:
Il suffit d'utiliser
namei
:la source
ls
. Merci!readlink -e <link>
note: readlink a par lui-même retourne b
note n ° 2: avec find -l, un utilitaire permettant de répertorier les chaînes pourrait facilement être écrit en perl, mais doit également être suffisamment intelligent pour détecter les boucles
readlink ne produira rien si vous avez une boucle. C'est mieux que de rester coincé, je suppose.
la source
brew install coreutils
etgreadlink -e <link>
Voici une fonction récursive dans Bash:
Sur plusieurs lignes:
Exemples:
Cela nécessite
stat(1)
ce qui peut ne pas être présent sur certains systèmes.Il échouera si les noms contiennent des backticks, des guillemets simples ou "->". Il se bloque dans une boucle avec des boucles de liens symboliques (ceci pourrait être résolu en utilisant un tableau associatif dans Bash 4). Il exporte une variable appelée "chaîne", qu'elle soit déjà utilisée ou non.
Il peut y avoir d'autres problèmes avec cela.
Modifier:
Correction d'un problème avec certains liens symboliques relatifs. Certains ne fonctionnent toujours pas, mais la version ci-dessous n'exige pas que la cible du lien existe.
Ajout d'une version qui utilise readlink:
la source
readlink
ne semble pas le montrer. Java sur Ubuntu est:/usr/bin/java -> /etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk/jre/bin/java
Vous pouvez simplement post-traiter la sortie de namei avec quelque chose comme
awk
ougrep
pour obtenir uniquement les lignes souhaitées:ou
la source