Pour une utilisation dans un script shell, je cherche un moyen en ligne de commande pour obtenir la destination d'un lien symbolique. Le plus proche que je suis venu jusqu'ici est stat -N src
, qui produit src -> dst
. Bien sûr, je pourrais analyser le résultat et obtenir dst
, mais je me demande s’il existe un moyen direct d’obtenir la destination.
command-line
symlink
gerrit
la source
la source
readlink -f
si vous voulez connaître la dernière cible de lien symbolique et pas seulement la suivante .-f
c'est une extension non-portable à GNUreadlink
.Sur Mac OS X et FreeBSD / NetBSD / etc. ses:
Plus généralement, je suppose que la solution est la suivante (stat --printf =% N utilise des guillemets étranges):
Exemple:
Une autre méthode est:
La dernière ligne est mutilée car elle n’a pas de nouvelle ligne, mais c’est bien si vous avez besoin du résultat dans une variable, comme ceci
Le
-maxdepth
est nécessaire pour empêcher lafind
descente dans les répertoires s’ilb
s’agit d’un répertoire.la source
stat --printf='%N\n'
c'est exactement ce que je veux, les citations étranges ne me dérangent pas, leurs mêmes citations rm et ln - utilisation interactivelink -> dest
dans la sortie. La solution find (1) doit être vérifiée si c'est avec GNU findutils ou autrement ...echo $f
mais cela ne produira certainement pas ce que vous attendez lorsque le lien symbolique pointe vers/*
(oui, c'est possible)Cela peut être fait en utilisant GNU
find
:find src -prune -printf "%l\n"
.la source
Portable: pas de chance si ce n'est d'utiliser des heuristiques pour analyser la sortie ls -l ou utiliser
perl -le 'print readlink("some-file")'
Certains systèmes ont une
readlink
commande, certains avec une-f
option pour obtenir le chemin absolu.Il existe différentes implémentations d'une
stat
commande en tant que wrapper pour les appelsstat
/lstat
system. GNU one n’est pas utile à cet égard, mais celui qui est intégré à zsh l’est plus:Toujours avec zsh, vous pouvez obtenir le chemin absolu d’un fichier (supprime chaque composant de lien symbolique) avec le
:A
modificateur (s’applique au développement de variable, au développement d’historique et au déplacement:la source
Sur un système où je n'ai
readlink
nistat
commandes, mais Python 2.x, j'utilise un court script:Notez que contrairement à
readlink -f
cela, il ne peut suivre qu'un seul niveau de lien symbolique.la source
Realpath portable pur Bash
la source
realpath
commande decoreutils
package,comme lié dans
readlink
la page de manuel de la commande.par exemple:
les sorties
sur ma machine.
la source