使い方
パスからファイル名を取得するには、basename コマンドを使う。
$ basename "/foo/bar/baz.ext" baz.ext
パスからディレクトリを取得するには、dirname コマンドを使う。
$ dirname "/foo/bar/baz.ext" /foo/bar
参考:
パス文字列からディレクトリ部/ファイル名を取得する | ザワプロ!
basename コマンド
パスからファイル名を取得する。
$ basename "/foo/bar/baz.ext" baz.ext
参考:
basename – フルパスからファイル名を取り出す | Webkaru
ファイル名などを抽出する basename コマンドの使い方まとめ | エンジニアの入り口
ファイル名からディレクトリや拡張子を取り除くには | @IT
basename コマンド – パス名からファイル名を取得する | @IT
basename – ファイル名からディレクトリや末尾の文字列を削除したものを返す | 日経クロステック
Extract file basename without path and extension in bash – Stack Overflow
dirname コマンド
パスからディレクトリを取得する。
$ dirname "/foo/bar/baz.ext" /foo/bar
参考:
dirname コマンド – パス名からディレクトリ部分を取得する | @IT
Quoting within $(command substitution) in Bash – Unix & Linux Stack Exchange
パラメータ展開でパスを加工する
${filepath##*/}:パスからファイル名を取得する。
$ filepath="/foo/bar/baz.ext"
$ echo "${filepath##*/}"
baz.ext
${filepath%/*}:パスからディレクトリを取得する。
$ filepath="/foo/bar/baz.ext"
$ echo "${filepath%/*}"
/foo/bar
${filename%.*}:拡張子を取り除く。
$ filename="foo.bar.ext"
$ echo "${filename%.*}"
foo.bar
${filename##*.}:拡張子を取得する。
$ filename="foo.bar.ext"
$ echo "${filename##*.}"
ext
パラメータ展開
%:後方最短一致した部分を取り除く##:前方最長一致した部分を取り除く
参考:
dirname / basename は「%/*」と「##*/」で書くと処理速度が早くなる – Qiita
ファイルパスからファイル名や拡張子を自由に取り出す | ザリガニが見ていた…。
ファイル名から拡張子とファイル名を分割して別のファイル名を生成するメモ | cloudpack.media
パスを要素に分解する
参考:
組み込みの正規表現機能を利用してファイルパスを要素に分割してみる | ゲンゾウ用ポストイット
空白/スペースを含むパス
参考:
空白を含むパスを変数にして cd する | clmemo@aka
Whitespace Safety in Shell Scripts | Yakking
How to cd to a directory with a name containing spaces? – Ask Different
How to store a path with white spaces into a variable – Stack Overflow