How to get the last part of dirname in Bash

Suppose I have a file /from/here/to/there.txt, and want to get only the last part of its dirname to instead of /from/here/to, what should I do?


You can use basename even though it's not a file. Strip off the file name using dirname, then use basename to get the last element of the string:

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

The opposite of dirname is basename:

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

Using bash string functions:

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