logo
Published on

Bashでオーディオファイルのファイル名を曲名に変更する

Authors

CDを読み取ったけど、freedbとかコンフィグファイルから読み取れるはずのオーディオファイルのメタデータが取得できず、困ったりします。 それで仕方なく、リッピングしてwavやflacにしてみたけど、やっぱ曲名もなにも書いてなくて、"track 01"みたいな感じじゃ、わかりにくいし、管理がとてもやりづらいですよね。

そういう場合に使えるスクリプトを書いてみました。Bashとかのシェルスクリプトは他のライトウェイト言語と違う癖があって、少し複雑なもの書こうとすると結構時間取られるのが難点ですね…。

必要条件:ファイル名が何らかの形で連番していること(トラックナンバーが含まれているなど) 必要なもの:トラックナンバーに連動して新しいファイル名(タイトル)が一行ずつ書かれたファイル<<e.g.names.txt>>

e.g.

$ ls
01 Track01.flac  03 Track03.flac  05 Track05.flac  07 Track07.flac  09 Track09.flac  11 Track11.flac
02 Track02.flac  04 Track04.flac  06 Track06.flac  08 Track08.flac  10 Track10.flac  12 Track12.flac
$ cat > names.txt
01 - 曲名1
02 - 曲名2
03 - 曲名3
04 - 曲名4
05 - 曲名5
06 - 曲名6
07 - 曲名7
08 - 曲名8
09 - 曲名9
10 - 曲名10
11 - 曲名11
12 - 曲名12

エラー対処で一応実行 :sed -i $'s/\t//' names.txt

スクリプト

i=1
for f in *.flac ; do
name=$(sed "$(echo $i)q;d" names.txt)
mv "$f" "$name.flac"
i=$((i+1))
done

.flac.wavとか適当なものに。

実行後

$ ls
01 - 曲名1.flac  04 - 曲名4.flac  07 - 曲名7.flac  10 - 曲名10.flac  names.txt
02 - 曲名2.flac  05 - 曲名5.flac  08 - 曲名8.flac  11 - 曲名11.flac
03 - 曲名3.flac  06 - 曲名6.flac  09 - 曲名9.flac  12 - 曲名12.flac