GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie erhalte ich das absolute Verzeichnis einer Datei in Bash?

Schauen Sie sich realpath an das unter GNU/Linux, FreeBSD und NetBSD verfügbar ist, aber nicht unter OpenBSD 6.8. Ich verwende so etwas wie:

CONTAININGDIR=$(realpath ${FILEPATH%/*})

um das zu tun, was sich anhört, als würdest du es versuchen.


Um den vollständigen Pfad zu erhalten, verwenden Sie:

readlink -f relative/path/to/file

So erhalten Sie das Verzeichnis einer Datei:

dirname relative/path/to/file

Sie können die beiden auch kombinieren:

dirname $(readlink -f relative/path/to/file)

Wenn readlink -f auf Ihrem System nicht verfügbar ist, können Sie dies verwenden:

function myreadlink() {
  (
  cd "$(dirname $1)"         # or  cd "${1%/*}"
  echo "$PWD/$(basename $1)" # or  echo "$PWD/${1##*/}"
  )
}

Beachten Sie, dass Sie, wenn Sie nur in ein Verzeichnis einer Datei wechseln müssen, die als relativer Pfad angegeben ist, den absoluten Pfad nicht kennen müssen, ein relativer Pfad ist vollkommen zulässig, also verwenden Sie 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 pushd statt cd , und popd wenn Sie fertig sind.

* Während myreadlink oben ist im Kontext dieser Frage gut genug, es hat einige Einschränkungen in Bezug auf readlink oben vorgeschlagenes Werkzeug. Beispielsweise folgt es einem Link zu einer Datei mit einem anderen basename nicht korrekt .


Dies funktioniert sowohl für Dateien als auch für Ordner:

absPath(){
    if [[ -d "$1" ]]; then
        cd "$1"
        echo "$(pwd -P)"
    else 
        cd "$(dirname "$1")"
        echo "$(pwd -P)/$(basename "$1")"
    fi
}

Linux
  1. So finden Sie die älteste Datei in einem Verzeichnisbaum in Linux

  2. Wie bekomme ich das Tty, in dem Bash läuft?

  3. So erhalten Sie den Exit-Status in einer Bash-Schleife

  4. Wie man nur die Anzahl der Zeilen einer Datei erhält

  5. Wie führe ich ein Bash-Skript über einen absoluten Pfad aus?

So erhalten Sie die Größe eines Verzeichnisses in Linux

So überprüfen Sie, ob eine Datei oder ein Verzeichnis in Bash vorhanden ist

So überprüfen Sie, ob eine Datei oder ein Verzeichnis in Bash vorhanden ist

So erhalten Sie die Größe eines Verzeichnisses in Linux

Die Bash‘?

So überprüfen Sie, ob eine Datei oder ein Verzeichnis in der Bash-Shell vorhanden ist