dirname

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.

dirname
Dirname example.png
Example of dirname command
Developer(s)Various open-source and commercial developers
Operating systemUnix, Unix-like, IBM i
PlatformCross-platform
TypeCommand
Licensecoreutils: GPLv3+

HistoryEdit

The version of dirname bundled in GNU coreutils was written by David MacKenzie and Jim Meyering.[1]

The dirname command has also been ported to the IBM i operating system.[2]

UsageEdit

The Single UNIX Specification for dirname is:

dirname string
string
A pathname

ExamplesEdit

dirname will retrieve the directory-path name from a pathname ignoring any trailing slashes

$ 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 /
/

PerformanceEdit

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.

MisconceptionsEdit

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 alsoEdit

ReferencesEdit

  1. ^ https://linux.die.net/man/1/dirname
  2. ^ IBM. "IBM System i Version 7.2 Programming Qshell" (PDF). Retrieved 2020-09-05.

External linksEdit