Dirname
Shell command for extracting the directory path portion from a path
From Wikipedia, the free encyclopedia
dirname is a shell command for extracting the directory path portion of a path, without the last name. The command is specified in the Single UNIX Specification and is primarily used in shell scripts.
| dirname | |
|---|---|
| Developers | Various open-source and commercial developers |
| Written in | C |
| Operating system | Unix, Unix-like, IBM i |
| Platform | Cross-platform |
| Type | Command |
| License | coreutils: GPLv3+ |
The version in GNU Core Utilities was written by David MacKenzie and Jim Meyering.[1] The command is available for Windows as part of the GnuWin32 project[2] and UnxUtils[3] and is in IBM i.[4]
Usage
The Single UNIX Specification is: dirname path. The required argument, path, is a file path string.
Examples
The command reports the directory path portion of a path ignoring any trailing slashes.
$ dirname /path/to/filename.ext
/path/to
$ dirname /path/to/
/path
$ dirname filename.ext
.
Performance
Since the command accepts only one operand, its usage within the inner loop of a shell script can be detrimental to performance. Consider:
while read file; do
dirname "$file"
done < some-input
The above causes a separate process invocation for each line of input. For this reason, shell substitution is typically used instead:
echo "${file%/*}";
Or, if relative pathnames need to be handled as well:
if [ -n "${file##*/*}" ]; then
echo "."
else
echo "${file%/*}";
fi
Note that these handle trailing slashes differently than dirname.
See also
- basename – Shell command for extracting the last name from a path
- List of POSIX commands