Gehe zum Verzeichnis des Ziels der symbolischen Verknüpfungsdatei

Gehe zum Verzeichnis des Ziels der symbolischen Verknüpfungsdatei

Wie kann ich einen Befehl (oder Alias) erstellen, um in das Verzeichnis zu gelangen, das die Zieldatei eines Symlinks enthält? Wenn ich beispielsweise einen Symlink habe

symFile@ -> /Users/zhermes/some/dir/someFile

Ich möchte laufen können <command> symFileund es cdmir ermöglichen/Users/zhermes/some/dir/

Antwort1

Die folgende Funktion prüft, ob der symbolische Link existiert und cdverweist auf sein übergeordnetes Verzeichnis. Natürlich funktioniert sie auch mit normalen Dateien. Bei Fehlern von readlinkoder könnte sie noch cleverer sein cd, aber es ist ein Anfang.

GNU/Linux:

Unter GNU/Linux können Sie Folgendes verwenden readlink -f:

cdln() { [[ -f $1 ]] && cd "$(dirname "$(readlink -f "$1")")" || echo "No such file: $1" }

BSD / OS X:

Das Folgende sollte unter Unix/OS X funktionieren, wo es keine -fOption gibt readlink. Das bedeutet natürlich, dass es verschachtelten symbolischen Links nicht folgt.

cdln() { [[ -f $1 ]] && cd "$(dirname "$(readlink "$1")")" || echo "No such file: $1" }

Unter OS X können Sie installieren coreutilsmitSelbstgebrautesund verwenden Sie greadlink -fstattdessen.

verwandte Informationen