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

    >


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 - クレイジークレイジーダンサーズ
02 - 零次元エクスプレス
03 - Colors
04 - ARROW RAIN
05 - 真夏の蜜と唇
06 - 迷夢ソウル
07 - Princess Lily
08 - 抜刀
09 - Together Going My Way
10 - Addicted Moon
11 - Colorless
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 - クレイジークレイジーダンサーズ  .flac  04 - ARROW RAIN  .flac    07 - Princess Lily  .flac          10 - Addicted Moon  .flac     names.txt
02 - 零次元エクスプレス  .flac              05 - 真夏の蜜と唇  .flac  08 - 抜刀  .flac                   11 - Colorless  .flac
03 - Colors  .flac                          06 - 迷夢ソウル  .flac    09 - Together Going My Way  .flac  12 - 全力ハッピーライフ.flac


お困りですか?この記事で紹介していることをマンツーマンで指導、解説、代行します。まずはお気軽にお問い合わせください。


関連するかもしれない記事

IoT TP-LINK HS100 スマートプラグにbashからAPIで電源のオン/オフを行う
Bashのデバッグログ(トレース)をかっこよくするだけ
Bash dateコマンドのゼロパディングをなくす
Bashのヒアドキュメントでの変数展開/式展開とエスケープ
fzfでBashコマンドラインをめっちゃ便利にする
すごい詳しいBashのコメントの色々なやり方
WSL bashからWindows 10のクリップボード履歴を正規表現検索する(SQL)


Close Menu