bashでファイル名を加工する
bashでデータを書き換えるスクリプトを書く時に,出力するファイル名を作るやり方をいつも忘れるのでメモ.
変数から該当する文字列を除去する
bashでは変数のパラメータ展開によって文字列を切り取ることができます.
このときに使うのが"#","##","%","%%"の4つ.
path=/path/to/file.txt
file=${path##*/}
# fileには"file.txt"が入る
“##"は前方から見て一致する最長の文字列を除去する.
上の例だと"*/"は"/path/to/"に一致する.
“#"を使うと最長ではなく最短になるので,"/"だけに一致してしまう.
file=hoge.tar.gz
ext=${file#*.}
ext2=${file##*.}
# extには"tar.gz"が入るが,ext2には"gz"が入る
“%"と"%%"は後方から見る点が異なる.
path=/path/to/file.txt
dir=${path%/*}
# dirには"/path/to"が入る
“%"は"#"と同じく最短一致で,"%%"は"##"と同じく最長一致で除去される.
パラメータ展開についてのリンク
Bashの変数パラメータ展開のまとめ
bashスクリプトだけで、ファイル名、拡張子を取得する
シェルのパラメータ展開でスクリプト自身のファイル名を取得する
bash
ディスカッション
コメント一覧
まだ、コメントがありません