GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo obtengo el directorio absoluto de un archivo en bash?

Echa un vistazo a realpath que está disponible en GNU/Linux, FreeBSD y NetBSD, pero no en OpenBSD 6.8. Yo uso algo como:

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

para hacer lo que parece que estás tratando de hacer.


Para obtener la ruta completa, use:

readlink -f relative/path/to/file

Para obtener el directorio de un archivo:

dirname relative/path/to/file

También puedes combinar los dos:

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

Si readlink -f no está disponible en su sistema, puede usar esto:

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

Tenga en cuenta que si solo necesita moverse a un directorio de un archivo especificado como una ruta relativa, no necesita conocer la ruta absoluta, una ruta relativa es perfectamente legal, así que solo use:

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

si desea volver (mientras se ejecuta el script) a la ruta original, use pushd en lugar de cd y popd cuando termines.

* Mientras que myreadlink anterior es lo suficientemente bueno en el contexto de esta pregunta, tiene alguna limitación relativa al readlink herramienta sugerida anteriormente. Por ejemplo, no sigue correctamente un enlace a un archivo con diferente basename .


Esto funcionará tanto para el archivo como para la carpeta:

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

Linux
  1. El Bash'?

  2. ¿Cómo sé el nombre del archivo de script en un script Bash?

  3. cómo encontrar el propietario de un archivo o directorio en python

  4. Cómo obtener el estado de salida de un bucle en bash

  5. Cómo obtener solo el número de líneas de un archivo

Cómo obtener el tamaño de un directorio en Linux

Cómo verificar si existe un archivo o directorio en Bash

Cómo verificar si existe un archivo o directorio en Bash

Cómo obtener el tamaño de un directorio en Linux

¿Cómo obtener el Tty en el que se está ejecutando Bash?

Cómo verificar si existe un archivo o directorio en Bash Shell