dirname Command
Purpose
Writes to standard output all but the last part of a specified path.
Syntax
dirname Path
Description
The dirname command reads the specified path name, deletes all but the last / (slash) and the characters following it, and writes the result to standard output. If no characters follow the last /, the dirname command uses the next to last / and ignores all characters following it. The dirname command applies the following rules in creating the path name:
- If the Path parameter is a // (double slash), or if the Path parameter consists entirely of slash characters, change the string to a single / (slash). Skip steps 2 through 7.
- Remove any trailing / characters from the specified path.
- If there are no / characters remaining in the Path parameter, change the path to a single . (period). Skip steps 4 through 7.
- Remove any trailing, non-slash characters from the path.
- If the remaining path is // (double slash), go to step 6.
- Remove any trailing slash characters from the path.
- If the remaining path is empty, change the path to a single /.
For example, entering:
dirname //
results in a single / (slash). Entering:
dirname /a/b/
results in /a. Entering:
dirname a
results in a single . (period). Entering:
dirname a/b
results in the path name a.
The dirname and basename commands are generally used inside command substitutions within a shell procedure to specify an output file name that is some variation of a specified input file name.
Exit Status
This command returns the following exit values:
Item | Description |
---|---|
0 | Successful completion |
>0 | An error occurred. |
Examples
To construct the name of a file located in the same directory as another, enter:
AOUTFILE=`dirname $TEXTFILE`/a.out
This sets the shell variable AOUTFILE to the name of an a.out file that is in the same directory as TEXTFILE. If TEXTFILE is /home/fran/prog.c, the value of dirname $TEXTFILE is /home/fran and AOUTFILE becomes /home/fran/a.out.
Files
Item | Description |
---|---|
/usr/bin/dirname | Contains the dirname command. |