Unix: Find Directory Name From Path
I
am a new Unix shell programer. How can I extract the directory name from a full path (say /nas01/data/backups/file.tar.gz)? How do I get directory name from its path on a Linux or Unix-like system?
You need to use the ”dirname” command[/donotprint]In other words, you can extract the directory name using dirname command.
Method #1: Use dirname command to get directory name
The syntax is:
dirname /path/to/file
OR
VAR=”$(dirname /path/to/my/myname.txt)”
OR
FOO= /path/to/my/folder/filename.avi
OUT= $(dirname ${FOO})
Examples
The following example displays output /nas01/data/backups:
dirname /nas01/data/backups/file.tar.gz
Sample outputs:
/nas01/data/backups
The following line sets the shell variable SRC to /nas01/data/backups:
SRC= $(dirname /nas01/data/backups/file.tar.gz)
echo Dirpath – $SRC
Sample outputs:
Dirpath – /nas01/data/backups
Method #2: Extract the directory name from a full path using bash/ksh shell
The $ character is used for parameter expansion, and command substitution. You can use it for manipulating and/or expanding variables on demands without using external commands such as sed or awk. To remove from shortest rear (end) pattern:
${VAR%/*}
VAL= ${PATHNAME%/*}
In this example, set FILE to /nas01/data/backups/demo.avi:
FILE= /nas01/data/backups/demo.avi
echo \$FILE = $FILE
To extract the directory name, type:
echo ${FILE%/*}
# OR store to DIR #
DIR= ${FILE%/*}
echo Dirpath – $DIR
Sample outputs:
Dirpath – /nas01/data/backups
See man pages dirname(1),bash(1),ksh(1) for more info.