mp3ファイルのid3タグにトラックとタイトル情報を自動的に追加するスクリプトを作成しようとしています。
この時点でファイル名から情報を削除し、id3v2コマンドに合わせてフォーマットしますが、複数の単語のタイトルをクリックするとエラーが発生しますCouldn't stat file '<second word of title>'
。実行中のid3v2コマンドをエコーすると、次の形式のコマンドが表示されます。
id3v2 -t Title\ Of\ Track -T 1 1_-_Title_Of_Track.mp3
そのテキストを端末にコピー/貼り付けると、マークアップは正しく行われますが、予想されるスクリプトの自動化が不足します。したがって、プロセスを自動化するように設計されたスクリプトは次のとおりです。
#!/bin/bash
for track in *.mp3 ; do
id3v2 $(echo ${track} | sed -e 's/^\([1-9][0-9]*\)_-_\(.*\).mp3/-t \2 -T \1/' -e 's/_/\\ /g') ${track}
done
タイトルを手動で入力すると単一のパラメータとして扱われますが、スクリプトで入力するとタイトルが処理されない理由をご存知ですか?
ベストアンサー1
sed
Valentin Bとmuehの意見に従ってスクリプトの構文解析を放棄し、代わりにbashの文字列操作を使用しました。複数のデータを解析して単一のコマンドでソートすることをお勧めしますがsed
、結果を使用したコマンド拡張は、スペースの前にバックスラッシュがある場合や引用符で囲まれた場合でも、出力をスペースで区切られた「単語」に分割します。
id3v2
したがって、一度にすべてのパラメータを設定するのではなく、sed
bashの文字列操作を使用してトラック番号とタイトルを個別に解析します。最終結果:
for track in *.mp3 ; do
track_num=${track%_-_*}
title=${track#*_} ; title=${title%.mp3} ; title=${title//_/ }
id3v2 -t "${title}" -T ${track_num} ${track}
done
私の質問に対する私のアプローチがうまくいかない理由を正確に説明してくれたmuehとbashの文字列操作を紹介したValentin Bに感謝します。