basename
strip directory and suffix from filenames
see also :
dirname - readlink
Synopsis
basename
NAME [SUFFIX]
basename OPTION... NAME...
add an example, a script, a trick and tips
examples
source
name=`basename`
name2=`basename $0`
name3=`basename /usr/bin/meld`
echo "basename:
[$name]"
echo "basename
D0: [$name2]"
echo "basename
meld: [$name3]"
basename /usr/bin/sort
-> "sort"
basename include/stdio.h .h
-> "stdio"
basename -s .h include/stdio.h
-> "stdio"
basename -a any/str1 any/str2
-> "str1" followed by "str2"
There is no need to use the external command, basename. It is much faster to use the shell's built-in capabilities:
BASENAME=${CWD##*/}
Also, 'BASENAME=`basename ${CWD}`' will fail if $CWD contains whitespace. It should be:
BASENAME=`basename "$CWD"`
This function is a complete POSIX-compliant replacement for the external command:
basename() #@ Strip directory and suffix from filenames
{ #@ USAGE: basename pathname [suffix]
local path suffix _basename
case $1 in
--) shift ;;
esac
path=$1
suffix=$2
case $path in
"") return ;;
*) path=${path%"${path##*[!/]}"}
case $path in
"") path="/" ;;
*) path=${path##*/} ;;
esac
;;
esac
case $path in
"$suffix" | "/")
_basename="$path"
;;
*)
_basename=${path%$suffix}
;;
esac
printf "%s\n" "$_basename"
}
example added by Chris F.A. Johnson
There is no need to use the external command, basename. It is much faster to use the shell's built-in capabilities:
BASENAME=${CWD##*/}
Also, 'BASENAME=`basename ${CWD}`' will fail if $CWD contains whitespace. It should be:
BASENAME=`basename "$CWD"`
This function is a complete POSIX-compliant replacement for the external command:
basename() #@ Strip directory and suffix from filenames
{ #@ USAGE: basename pathname [suffix]
local path suffix _basename
case $1 in
--) shift ;;
esac
path=$1
suffix=$2
case $path in
"") return ;;
*) path=${path%"${path##*[!/]}"}
case $path in
"") path="/" ;;
*) path=${path##*/} ;;
esac
;;
esac
case $path in
"$suffix" | "/")
_basename="$path"
;;
*)
_basename=${path%$suffix}
;;
esac
printf "%s\n" "$_basename"
}
example added by Chris F.A. Johnson
description
Print NAME with
any leading directory components removed. If specified, also
remove a trailing SUFFIX.
-a, --multiple
support multiple arguments and
treat each as a NAME
-s,
--suffix=SUFFIX
remove a trailing SUFFIX
-z,
--zero
separate output with NUL rather
than newline
--help
display this help and exit
--version
output version information and
exit
copyright
Copyright © 2012 Free Software Foundation, Inc. License GPLv3+:
GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute
it. There is NO WARRANTY, to the extent permitted by law.
reporting bugs
Report basename bugs to bug-coreutils[:at:]gnu[:dot:]org
GNU coreutils home page:
<http://www.gnu.org/software/coreutils/>
General help using GNU software:
<http://www.gnu.org/gethelp/>
Report basename translation bugs to
<http://translationproject.org/team/>
see also
dirname ,
readlink
The full
documentation for basename is maintained as a Texinfo
manual. If the info and basename programs are
properly installed at your site, the command
info
coreutils 'basename invocation'
should give you
access to the complete manual.
author
Written by
David MacKenzie.