Für die Verwendung in einem Shell-Skript suche ich nach einer Befehlszeile, um das Ziel eines symbolischen Links zu ermitteln. Das nächste was ich bisher gesehen habe ist stat -N src
, welche Ausgänge src -> dst
. Natürlich könnte ich die Ausgabe analysieren und abrufen dst
, aber ich frage mich, ob es eine direkte Möglichkeit gibt, das Ziel zu ermitteln.
command-line
symlink
Gerrit
quelle
quelle
readlink -f
Sie diese Option, wenn Sie das letzte Symlink-Ziel und nicht nur das nächste kennen möchten .-f
eine nicht portable Erweiterung von GNU istreadlink
.Unter Mac OS X und FreeBSD / NetBSD / etc. es ist:
Allgemeiner denke ich, dass die Lösung ist (stat --printf =% N verwendet seltsame Anführungszeichen):
Beispiel:
Eine andere Methode ist:
Die letzte Zeile ist verstümmelt, weil es keine neue Zeile gibt, aber das ist in Ordnung, wenn Sie das Ergebnis in einer Variablen wie dieser benötigen
Das
-maxdepth
wird benötigt, um zu verhindern, dass esfind
in Verzeichnisseb
abfällt, wenn es sich zufällig um ein Verzeichnis handelt.quelle
stat --printf='%N\n'
ist genau das, was ich will, seltsame Zitate nicht stören mich, ihr die gleichen Zitate rm und ln --interactive Verwendunglink -> dest
in der Ausgabe ausgedruckt wird. Die find (1) -Lösung sollte überprüft werden, ob es mit GNU-Findutils oder auf andere Weise ...echo $f
/*
Dies kann GNU erfolgen mit
find
:find src -prune -printf "%l\n"
.quelle
Portabel: kein Glück außer der Verwendung von Heuristiken, um ls -l-Ausgaben zu analysieren oder zu verwenden
perl -le 'print readlink("some-file")'
Einige Systeme verfügen über einen
readlink
Befehl, andere über eine-f
Option zum Abrufen des absoluten Pfads.Es gibt verschiedene Implementierungen eines
stat
Befehls als Wrapper für diestat
/lstat
system-Aufrufe. Die GNU-Version ist in dieser Hinsicht nicht nützlich, aber die integrierte Version von zsh ist eher so:Noch mit zsh können Sie den absoluten Pfad einer Datei (entfernt jede Symlink-Komponente) mit dem
:A
Modifikator abrufen (gilt für Variablenerweiterung, Verlaufserweiterung und Globbing:quelle
Auf einem System, auf dem ich keine
readlink
oderstat
Befehle habe, aber Python 2.x, verwende ich ein kurzes Skript:Beachten Sie, dass im Gegensatz
readlink -f
dazu nur eine Ebene von Symlink folgen darf.quelle
Tragbarer reiner Bash Realpath
quelle
realpath
Befehl descoreutils
Pakets,wie in
readlink
der Handbuchseite des Befehls verlinkt .zum Beispiel:
Ausgänge
auf meiner Maschine.
quelle