nodejs bash shell dirname

nodejs - Cómo obtener la última parte de dirname en Bash



dirname linux (8)

Supongamos que tengo un archivo /from/here/to/there.txt , y quiero obtener solo la última parte de su dirname to lugar de /from/here/to , ¿qué debo hacer?


Esta pregunta es algo así como THIS .

Para resolver eso, puedes hacer:

DirPath="/from/here/to/there.txt" DirPath="$(dirname $DirPath)" DirPath="$(basename $DirPath)" echo "$DirPath"

Como mi amigo dijo, esto también es posible:

basename `dirname "/from/here/to/there.txt"`

Para obtener cualquier parte de tu camino, podrías hacer:

echo "/from/here/to/there.txt" | awk -F/ ''{ print $2 }'' OR echo "/from/here/to/there.txt" | awk -F/ ''{ print $3 }'' OR etc


Forma pura de BASH:

s="/from/here/to/there.txt" [[ "$s" =~ ([^/]+)/[^/]+$ ]] && echo "${BASH_REMATCH[1]}" to


Lo opuesto a dirname es basename :

basename "$(dirname "/from/here/to/there.txt")"


Puedes usar el basename aunque no sea un archivo. Quite el nombre del archivo usando dirname , luego use basename para obtener el último elemento de la cadena:

dir="/from/here/to/there.txt" dir="$(dirname $dir)" # Returns "/from/hear/to" dir="$(basename $dir)" # Returns just "to"


Una forma más

IFS=/ read -ra x <<<"/from/here/to/there.txt" && printf "%s/n" "${x[-2]}"


Una manera awk de hacerlo sería:

awk -F''/'' ''{print $(NF-1)}'' <<< "/from/here/to/there.txt"

Explicación:

  • -F''/'' establece el separador de campo como "/"
  • imprime el segundo campo pasado $(NF-1)
  • <<< usa cualquier cosa como entrada estándar ( explicación wiki )

Usando la expansión del parámetro Bash, podrías hacer esto:

path="/from/here/to/there.txt" dir="${path%/*}" # sets dir to ''/from/here/to'' (equivalent of dirname) last_dir="${dir##*/}" # sets last_dir to ''to'' (equivalent of basename)

Esto es más eficiente ya que no se utilizan comandos externos.


Usar las funciones de cadena bash :

$ s="/from/here/to/there.txt" $ s="${s%/*}" && echo "${s##*/}" to