Developer(s) | Various open-source and commercial developers |
---|---|
Operating system | Unix, Unix-like, IBM i |
Platform | Cross-platform |
Type | Command |
License | coreutils: GPLv3+ |
dirname
is a standard
computer program on
Unix and
Unix-like
operating systems. When dirname
is given a
pathname, it will delete any suffix beginning with the last slash ('/'
) character and return the result. dirname
is described in the
Single UNIX Specification and is primarily used in
shell scripts.
The version of dirname
bundled in
GNU
coreutils was written by David MacKenzie and Jim Meyering.
[1] The command is available as a separate package for
Microsoft Windows as part of the
UnxUtils collection of
native
Win32
ports of common GNU Unix-like utilities.
[2] The dirname command has also been ported to the
IBM i operating system.
[3]
The
Single UNIX Specification for dirname
is:
dirname string
string
$ 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 / /
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.
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]
Developer(s) | Various open-source and commercial developers |
---|---|
Operating system | Unix, Unix-like, IBM i |
Platform | Cross-platform |
Type | Command |
License | coreutils: GPLv3+ |
dirname
is a standard
computer program on
Unix and
Unix-like
operating systems. When dirname
is given a
pathname, it will delete any suffix beginning with the last slash ('/'
) character and return the result. dirname
is described in the
Single UNIX Specification and is primarily used in
shell scripts.
The version of dirname
bundled in
GNU
coreutils was written by David MacKenzie and Jim Meyering.
[1] The command is available as a separate package for
Microsoft Windows as part of the
UnxUtils collection of
native
Win32
ports of common GNU Unix-like utilities.
[2] The dirname command has also been ported to the
IBM i operating system.
[3]
The
Single UNIX Specification for dirname
is:
dirname string
string
$ 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 / /
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.
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]