ども、かっぱです。

tl;dr

以下のようにファイル名から拡張子とファイル名を分割してファイル部分に日付(epoch time)をつけた上で元の拡張子を付けるシチュエーションが発生した。

旧ファイル名:foo.txt
新ファイル名:foo_${epoch time}.txt

参考

シェルのパラメータ展開を利用して、basename、ファイル名(拡張子なし)、拡張子を取得する方法。 #!/bin/bash path="/path/to/foo.tar.gz" echo "path: $path" basename=${path##*/} echo "basename: $basename" filename=${basenam...

te2u.hatenablog.jp

いつも、いざ使う時になって、どうやるんだっけ?と探し回ってしまうので、忘れないようにメモ。(以前の..

d.hatena.ne.jp

有難うございます。

メモ

こんな感じで

#!/bin/bash

FILE_NAME=${1}

# 末尾から最短一致したパターンを削除する(拡張子を削除する = ファイル名のみ取得出来る)
FILE=${FILE_NAME%.*}

# 先頭から最長一致したパターンを削除する(ファイル名を削除する = 拡張子のみ取得出来る)
EXTENSION=${FILE_NAME##*.}
DATE=`date +%s`

echo "旧ファイル名: ${FILE_NAME}"

# 拡張子無しファイルの対応
if [ "${FILE}" == "${EXTENSION}" ];then
  FILE_NAME=${FILE}_${DATE}
  EXTENSION=""
else
  FILE_NAME=${FILE}_${DATE}.${EXTENSION}
fi

echo "ファイル: ${FILE}"
echo "拡張子: ${EXTENSION}"
echo "新ファイル名: ${FILE_NAME}"

試してみる

#
# 拡張子付きファイル
#
$ ./replce.sh foo.txt
旧ファイル名: foo.txt
ファイル: foo
拡張子: txt
新ファイル名: foo_1457570906.txt

#
# 拡張子なしファイル
#
$ ./replce.sh foo
旧ファイル名: foo
ファイル: foo
拡張子:
新ファイル名: foo_1457570909

bash って…

奥深い。

元記事はこちら

Bash でファイル名から拡張子とファイル名を分割して別のファイル名を生成するメモ