Linuxでディレクトリ内のflacをすべてmp3に変換
メモ。Ubuntu Linux使ってたときにFLAC化してたファイルをiPhoneで聞けるMP3に変換したい。
flac/アーティスト名/アルバム名/
というディレクトリがたくさんあってさらにその下にflacファイルと、ジャケット画像のjpgや歌詞のtxtファイルがあったりする。
flacを全部mp3に変換したい。
最初、以下のコマンドでやろうとした
ubuntu:progd% find . -name "*.flac" -exec flac --decode --stdout {} | lame - {}.mp3 \; find: missing argument to `-exec' lame: excess arg ;
パイプ以降はexecの引数とされないのでは?
find . -name "*.flac" -exec "flac --decode --stdout {} | lame - {}.mp3" \;
No such file or directory っていわれる
ubuntu:progd% find . -name "*.flac" -exec "flac --decode --stdout {} | lame - {}.mp3 \;" find: missing argument to `-exec'
だめ。
find . -name "*.flac" -print0 | xargs -0 -I{} flac --decode --stdout {} | lame - {}.mp3
LAMEが{}.mp3って名前で書き出してしまうしなんかファイルひとつ処理した後止まる
シェルのforループは名前に空白を含むファイルをうまく処理する方法がわからず。
ubuntu:progd% cat flac2mp3.sh #!/bin/sh echo decoding: $1 flac --decode --stdout "$1" | lame - "$1".mp3 ubuntu:progd% find . -name "*.flac" -exec ./flac2mp3.sh {} \;
結局こうした。
追記
ファイルの拡張子が .flac.mp3 になってしまったので、perlワンライナーというものを試した
find . -name "*.mp3" | perl -lne '$o=$_; s/\.flac//; rename $o,$_;'