Bash basename and dirname scripts

For it's always a pain to remember bash wizardry by heart, here's a piece of usefull information collected on the web.

 From: "Grigoriy Strokin" <grg@philol.msu.ru>
 Newsgroups: comp.unix.shell
 Subject: fast basename and dirname functions for BASH/SH
 Date: Sat, 27 Dec 1997 21:18:40 +0300
 Please send your comments to grg@philol.msu.ru
 function basename()
 {
   local name="${1##*/}"
   echo "${name%$2}"
 }
 function dirname()
 {
   local dir="${1%${1##*/}}"
   "${dir:=./}" != "/" && dir="${dir%?}"
   echo "$dir"
 }
 # Two additional functions:
 # 1) namename prints the basename without extension
 # 2) ext prints extension of a file, including "."
 
 function namename()
 {
   local name=${1##*/}
   local name0="${name%.*}"
   echo "${name0:-$name}"
 }
 function ext()
 {
   local name=${1##*/}
   local name0="${name%.*}"
   local ext=${name0:+${name#$name0}}
   echo "${ext:-.}"
 }
Page generated by UWiKiCMS 1.1.8 on Fri Mar 29 2024.
Copyright © 2009 Christian Mauduit. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
Updated on Tue Oct 06 2009.