id3v2とsedを使用したid3タグスクリプトの作成

id3v2とsedを使用したid3タグスクリプトの作成

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

sedValentin Bとmuehの意見に従ってスクリプトの構文解析を放棄し、代わりにbashの文字列操作を使用しました。複数のデータを解析して単一のコマンドでソートすることをお勧めしますがsed、結果を使用したコマンド拡張は、スペースの前にバックスラッシュがある場合や引用符で囲まれた場合でも、出力をスペースで区切られた「単語」に分割します。

id3v2したがって、一度にすべてのパラメータを設定するのではなく、sedbashの文字列操作を使用してトラック番号とタイトルを個別に解析します。最終結果:

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に感謝します。

おすすめ記事