# ファイル名を取り出す(拡張子あり)
basename '/a/b/c.d.e'
# c.d.e
# ファイル名を取り出す(拡張子なし)
basename '/a/b/c.d.e' .e
# c.d
dirname '/a/b/c.d.e'
# /a/b
パタンマッチを使うと・・・
${変数#パターン} # 先頭から最短一致した部分を取り除く
${変数##パターン} # 先頭から最長一致した部分を取り除く
${変数%パターン} # 末尾から最短一致した部分を取り除く
${変数%%パターン} # 末尾から最長一致した部分を取り除く
こんな感じでも記述が出来る。
#!/bin/bash
fpath='/a/b/c.d.e'
# ファイル名を取り出す(拡張子あり)
faname_ext="${fpath##*/}"
echo $fname_ext
# c.d.e
# ファイル名を取り出す(拡張子なし)
fname="${fname_ext%.*}"
echo $fname
# c.d
# 拡張子を取り出す
fext="${fpath##*.}"
echo $fext
#e
# ディレクトリを取り出す
fdir="${fpath%/*}"
echo $fdir
# /a/b
### -------------------------------
### ちょっと応用
### -------------------------------
# 拡張子を変更する
echo "${fpath%.*}.x"
# /a/b/c.d.x
参考:
ザリガニが見ていた...。