Um den vollständigen Pfad zu erhalten, verwenden Sie:
readlink -f relative/path/to/file
So rufen Sie das Verzeichnis einer Datei ab:
dirname relative/path/to/file
Sie können auch beide kombinieren:
dirname $(readlink -f relative/path/to/file)
Wenn readlink -fes auf Ihrem System nicht verfügbar ist, können Sie Folgendes verwenden * :
function myreadlink() {
(
cd "$(dirname $1)"
echo "$PWD/$(basename $1)"
)
}
Beachten Sie, dass, wenn Sie nur in ein Verzeichnis einer Datei wechseln müssen, die als relativer Pfad angegeben ist, Sie den absoluten Pfad nicht kennen müssen. Ein relativer Pfad ist vollkommen legal. Verwenden Sie also einfach:
cd $(dirname relative/path/to/file)
Wenn Sie (während das Skript ausgeführt wird) zum ursprünglichen Pfad zurückkehren möchten, verwenden Sie pushdanstelle von cdund popdwenn Sie fertig sind.
* Während das myreadlinkoben Gesagte im Zusammenhang mit dieser Frage gut genug ist, weist es einige Einschränkungen in Bezug auf das readlinkoben vorgeschlagene Tool auf. Zum Beispiel folgt es nicht richtig einem Link zu einer Datei mit einem anderen basename.