dirname
GPLv3+ |
dirname
is a standard
'/'
) character and return the result. dirname
is described in the Single UNIX Specification and is primarily used in shell scriptsHistory
The version of dirname
bundled in
Usage
The Single UNIX Specification for dirname
is:
dirname string
string
- A pathname
- A
$ dirname /home/martin/docs/base.wiki /home/martin/docs
$ dirname /home/martin/docs/. /home/martin/docs $ dirname /home/martin/docs/ /home/martin $ dirname base.wiki . $ dirname / /
Performance
Since dirname
accepts only one operand, its usage within the inner loop of shell scripts can be detrimental to performance. Consider
while read file; do
dirname "$file"
done < some-input
The above excerpt would cause 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.
Misconceptions
We might think that paths that end in a trailing slash are a directory. But actually, the trailing slash represents all files within the directory.
/home/martin/docs/.
The correct way to represent a path as a directory is with a trailing slash and a period.[according to whom?][citation needed]
See also
- List of Unix commands
- basename
- Path (computing)
References
- ^ "Dirname(1) - Linux man page".
- ^ "Native Win32 ports of some GNU utilities". unxutils.sourceforge.net.
- ^ IBM. "IBM System i Version 7.2 Programming Qshell" (PDF). IBM. Archived (PDF) from the original on 2020-09-18. Retrieved 2020-09-05.
External links
- The Single UNIX Specification, Version 4 from The Open Group
: return the directory portion of a pathname – Shell and Utilities Reference,
- Linux User Commands Manual –
- OpenBSD General Commands Manual –