GNU/Linux >> Linux Esercitazione >  >> Linux

Come ottengo la directory assoluta di un file in bash?

Dai un'occhiata a realpath disponibile su GNU/Linux, FreeBSD e NetBSD, ma non su OpenBSD 6.8. Uso qualcosa come:

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

per fare quello che sembra tu stia cercando di fare.


Per ottenere il percorso completo utilizzare:

readlink -f relative/path/to/file

Per ottenere la directory di un file:

dirname relative/path/to/file

Puoi anche combinare i due:

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

Se readlink -f non è disponibile sul tuo sistema puoi usare questo:

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

Nota che se hai solo bisogno di spostarti in una directory di un file specificato come percorso relativo, non hai bisogno di conoscere il percorso assoluto, un percorso relativo è perfettamente legale, quindi usa solo:

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

se desideri tornare indietro (mentre lo script è in esecuzione) al percorso originale, usa pushd invece di cd e popd quando hai finito.

* Mentre myreadlink sopra è abbastanza buono nel contesto di questa domanda, ha qualche limitazione relativa al readlink strumento suggerito sopra. Ad esempio, non segue correttamente un collegamento a un file con basename diverso .


Funzionerà sia per file che per cartelle:

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

Linux
  1. Come faccio a conoscere il nome del file di script in uno script Bash?

  2. come trovare il proprietario di un file o di una directory in python

  3. Come ottenere la dimensione di tar.gz nel file (MB) in python

  4. Come elencare la dimensione di ogni file e directory e ordinare per dimensione decrescente in Bash?

  5. Come ottenere lo stato di uscita un ciclo in bash

Come ottenere la dimensione di una directory in Linux

Come verificare se esiste un file o una directory in Bash

Come verificare se un file o una directory esiste in Bash

Come ottenere la dimensione di una directory in Linux

Come verificare se esiste un file o una directory in Bash Shell

Come eseguire uno script bash tramite percorso assoluto?