標準ファイル名称への変換
問題
録画したTSファイルや変換した動画ファイルの名称の形式がバラバラなので統一させたいなぁと思います.
経緯
これまでに作成したバッチでは対処できないファイル名称があちらこちらにありました.変則的なファイル名称があちこちに散在しているという,なんとも浅はかな事態となっています.標準ファイル名称というと大仰ですが,取り敢えず現在は,次のような形式にしたいと思います.
<標準ファイル名称>::=<番組名> <年> <月日><曜日><拡張子><番組名>::=任意文字列<年>::=数字4桁<月日>::=数字4桁 1月15日なら 0115<曜日>::="("[日月火水木金土]")"<拡張子>::=.ts .avi など
対処
動画ファイル名を与えると,標準ファイル名を返すスクリプトを作成.
#! /usr/bin/sh # # 動画ファイル名称の標準形を返します. # 例えば次のようなファイル名を想定しています. # # ニュース ファイナル 2010 1014 01.ts # ニュース ファイナル 2010 1014 2305 02.ts # ニュース ファイナル 2010 1014 2305.0002.0001.ts # ニュース ファイナル 2010 1014 2305.0002.ts # ニュース ファイナル 2010 1014 2305.ts # ニュース ファイナル 2010 1014(木) 0001.ts # ニュース ファイナル 2010 1014(木) 001.ts # ニュース ファイナル 2010 1014(木) 01.ts # ニュース ファイナル 2010 1014(木) 2305.0002.ts # ニュース ファイナル 2010 1014(木) 2305.ts # ニュース ファイナル 2010 1014(木).ts # ニュース ファイナル 2010 1014.ts # # 標準形として,次のようなファイル名を返します. # # ニュース ファイナル 2010 1014(木).ts # if [[ -z "$1" ]]; then exit; fi for xp in \ "^\(.\+\) \([0-9]\{4\}\) \([0-9]\{4\}\) [0-9]\{4\} [0-9]\{2\}\.[^\.]\+$" \ "^\(.\+\) \([0-9]\{4\}\) \([0-9]\{4\}\) [0-9]\{2\}\.[^\.]\+$" \ "^\(.\+\) \([0-9]\{4\}\) \([0-9]\{4\}\) \([0-9]\{4\}\.\)\+[^\.]\+$" \ "^\(.\+\) \([0-9]\{4\}\) \([0-9]\{4\}\)(.).*\.[^\.]\+$" \ "^\(.\+\) \([0-9]\{4\}\) \([0-9]\{4\}\)\.[^\.]\+$" do title=$(echo "$1"|sed -e "s/""$xp""/\1 \2 \3/") if [[ "$title" != "$1" ]]; then date_str=$(echo "$1"|sed -e "s/""$xp""/\2\3/") weekday=$(date -d $date_str "+%a") std_name="$title($weekday).${1##*.}" echo "$std_name" break fi done