GNU/Linux >> Znalost Linux >  >> Linux

Jak získám absolutní adresář souboru v bash?

Podívejte se na realpath který je dostupný na GNU/Linux, FreeBSD a NetBSD, ale ne OpenBSD 6.8. Používám něco jako:

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

dělat to, o čem to vypadá, že se snažíte.


Chcete-li získat úplnou cestu, použijte:

readlink -f relative/path/to/file

Chcete-li získat adresář souboru:

dirname relative/path/to/file

Můžete je také kombinovat:

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

Pokud readlink -f není ve vašem systému k dispozici, můžete použít toto:

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

Všimněte si, že pokud se potřebujete přesunout pouze do adresáře souboru určeného jako relativní cesta, nemusíte znát absolutní cestu, relativní cesta je naprosto legální, takže stačí použít:

cd $(dirname relative/path/to/file)

pokud se chcete vrátit (za běhu skriptu) na původní cestu, použijte pushd místo cd a popd až budete hotovi.

* Zatímco myreadlink výše je v kontextu této otázky dost dobrý, má určitá omezení vzhledem k readlink nástroj navržený výše. Například nenásleduje správně odkaz na soubor s jiným basename .


Toto bude fungovat pro soubor i složku:

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

Linux
  1. Jak poznám název souboru skriptu ve skriptu Bash?

  2. jak najít vlastníka souboru nebo adresáře v pythonu

  3. Jak získat velikost tar.gz v (MB) souboru v pythonu

  1. Jak vypsat velikost každého souboru a adresáře a seřadit podle sestupné velikosti v Bash?

  2. Jak získat stav ukončení smyčky v bash

  3. Jak získat datum/čas vytvoření souboru v Bash/Debian?

  1. Jak získat pouze počet řádků souboru

  2. Jak mohu najít nejstarší soubor ve stromu adresářů

  3. Jak spustit bash skript přes absolutní cestu?