Jump to content

Basename: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Additional example to show trailing slash handling.
m Usage: Copyedit, fixing duplicated words: specification
 
(33 intermediate revisions by 15 users not shown)
Line 1: Line 1:
{{Short description|Unix string manipulation utility}}
{{lowercase}}
{{lowercase}}
{{Infobox software
{{no footnotes|date=March 2013}}
| name = basename
'''<tt>basename</tt>''' is a standard [[UNIX]] [[computer program]]. When <tt>basename</tt> is given a [[pathname]], it will delete any prefix up to the last slash (<code>'/'</code>) character and return the result. <tt>basename</tt> is described in the [[Single UNIX Specification]] and is primarily used in [[shell script]]s.
| logo =
| screenshot =
| screenshot size =
| caption =
| developer =
| released = {{Start date and age|1979|1}}
| latest release version =
| latest release date =
| programming language = [[C (programming language)|C]]
| operating system = [[Unix]], [[Unix-like]], [[Plan 9 from Bell Labs|Plan 9]], [[Inferno (operating system)|Inferno]]
| platform = [[Cross-platform]]
| genre = [[Command (computing)|Command]]
| license = [[coreutils]]: [[GPLv3+]]<br />Plan 9: [[MIT License]]
| website =
}}
'''<kbd>basename</kbd>''' is a standard [[computer program]] on [[Unix]] and [[Unix-like]] [[operating system]]s. When <kbd>basename</kbd> is given a [[pathname]], it will delete any prefix up to the last slash (<code>'/'</code>) character and return the result. <kbd>basename</kbd> is described in the [[Single UNIX Specification]] and is primarily used in [[shell script]]s.

==History==
{{code|basename}} was introduced in [[X/Open]] Portability Guidelines issue 2 of 1987. It was inherited into the first version of POSIX and the [[Single Unix Specification]].<ref>{{man|cu|basename|SUS}}</ref> It first appeared in 4.4BSD.<ref>{{man|1|basename|FreeBSD}}</ref>

The version of <code>basename</code> bundled in [[GNU]] [[coreutils]] was written by David MacKenzie.<ref>{{man|1|basename|Linux}}</ref>

The command is available as a separate package for [[Microsoft Windows]] as part of the [[GnuWin32]] project<ref>[http://gnuwin32.sourceforge.net/packages/coreutils.htm CoreUtils for Windows]</ref> and the [[UnxUtils]] collection of [[Native (computing)|native]] [[Windows API|Win32]] [[porting|ports]] of common [[GNU]] Unix-like utilities.<ref>[http://unxutils.sourceforge.net/ Native Win32 ports of some GNU utilities]</ref>


==Usage==
==Usage==
The [[Single UNIX Specification]] specification for <tt>basename</tt> is.
The [[Single UNIX Specification]] for <kbd>basename</kbd> is.
basename string [suffix]
basename string [suffix]


:<tt>string</tt>
:<kbd>string</kbd>
::A [[pathname]]
::A [[pathname]]
:<tt>suffix</tt>
:<kbd>suffix</kbd>
::If specified, <tt>basename</tt> will also delete the suffix.
::If specified, <kbd>basename</kbd> will also delete the suffix.

==Examples==
basename will retrieve the last name from a pathname ignoring any trailing slashes
<syntaxhighlight lang="console">
$ basename /home/jsmith/base.wiki
base.wiki


$ basename /home/jsmith/
==Example==
jsmith
$ basename /home/jsmith/base.wiki
base.wiki


$ basename /home/jsmith/base.wiki .wiki
$ basename /
/
base
</syntaxhighlight>
basename can also be used to remove the end of the base name, but not the complete base name
<syntaxhighlight lang="console">
$ basename /home/jsmith/base.wiki .wiki
base


$ basename /home/jsmith/
$ basename /home/jsmith/base.wiki ki
base.wi
jsmith


$ basename /home/jsmith/base.wiki base.wiki
==Performance==
base.wiki
</syntaxhighlight>


==See also==
Since <tt>basename</tt> accepts only one operand, its usage within the [[inner loop]] of shell scripts can be detrimental to performance. Consider
* [[List of Unix commands]]
<source lang="bash">
* [[dirname]]
while read file; do
* [[Path (computing)]]
basename "$file" ;
done < ''some-input''
</source>
The above excerpt would cause a separate process invocation for each line of input. For this reason, shell substitution is typically used instead <!-- invoking an extra program like sed is avoided this way -->
<source lang="bash">
echo "${file##*/}";
</source>


== See also ==
==References==
{{Reflist}}
* [[List of Unix utilities]]
* <code>[[dirname]]</code>
* [[Path_(computing)|Path]]


== External links ==
==External links==
{{Wikibooks|Guide to Unix|Commands}}
*{{man|cu|basename|SUS|return non-directory portion of a pathname}}
*{{man|cu|basename|SUS|return non-directory portion of a pathname}}
*{{man|1|basename||strip directory and suffix from filenames}}
*{{man|1|basename|Plan 9}}
*{{man|1|basename|Inferno}}
*{{man|1|basename|die.net}}
*{{man|1|basename|OpenBSD}}


{{unix commands}}
{{Unix commands}}
{{Plan 9 commands}}
{{Core Utilities commands}}


[[Category:Standard Unix programs|Basename]]
[[Category:Standard Unix programs|Basename]]
[[Category:Unix SUS2008 utilities]]
[[Category:Unix SUS2008 utilities]]
[[Category:Plan 9 commands]]
[[Category:Inferno (operating system) commands]]
[[Category:IBM i Qshell commands]]

Latest revision as of 16:29, 3 September 2024

basename
Initial releaseJanuary 1979; 46 years ago (1979-01)
Written inC
Operating systemUnix, Unix-like, Plan 9, Inferno
PlatformCross-platform
TypeCommand
Licensecoreutils: GPLv3+
Plan 9: MIT License

basename is a standard computer program on Unix and Unix-like operating systems. When basename is given a pathname, it will delete any prefix up to the last slash ('/') character and return the result. basename is described in the Single UNIX Specification and is primarily used in shell scripts.

History

[edit]

basename was introduced in X/Open Portability Guidelines issue 2 of 1987. It was inherited into the first version of POSIX and the Single Unix Specification.[1] It first appeared in 4.4BSD.[2]

The version of basename bundled in GNU coreutils was written by David MacKenzie.[3]

The command is available as a separate package for Microsoft Windows as part of the GnuWin32 project[4] and the UnxUtils collection of native Win32 ports of common GNU Unix-like utilities.[5]

Usage

[edit]

The Single UNIX Specification for basename is.

basename string [suffix]
string
A pathname
suffix
If specified, basename will also delete the suffix.

Examples

[edit]

basename will retrieve the last name from a pathname ignoring any trailing slashes

$ basename /home/jsmith/base.wiki 
base.wiki

$ basename /home/jsmith/
jsmith

$ basename /
/

basename can also be used to remove the end of the base name, but not the complete base name

$ basename /home/jsmith/base.wiki .wiki
base

$ basename /home/jsmith/base.wiki ki
base.wi

$ basename /home/jsmith/base.wiki base.wiki
base.wiki

See also

[edit]

References

[edit]
  1. ^ basename – Shell and Utilities Reference, The Single UNIX Specification, Version 4 from The Open Group
  2. ^ basename(1) – FreeBSD General Commands Manual
  3. ^ basename(1) – Linux User Manual – User Commands
  4. ^ CoreUtils for Windows
  5. ^ Native Win32 ports of some GNU utilities
[edit]