share facebook facebook twitter menu hatena pocket slack

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

川原 洋平

WRITTEN BY 川原 洋平

ども、かっぱです。

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 でファイル名から拡張子とファイル名を分割して別のファイル名を生成するメモ

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。