音楽をクリーンアップするための Bash スクリプトを作成しています。
すべてのファイル名をフォーマットして作成したかったので、インターネットで少し検索して、次の行を書きました。
sed -i -e 's/[-_]/ /g' -e 's/ \+/ /g' -e **'s/\<[a-z]/\U&/g'** -e "s/$artist //g" -e "s/$album //g"
ファイル名をテキストファイルに追加してからsedしていましたが、新しい名前をファイルに適用する方法がわかりませんでした。
そこで、名前の変更を試してみたところ、単語の最初の文字をすべて大文字にするはずの太字の部分を除いて、まったく同じ結果が得られました。
rename 's/[-_]/ /g' * && rename 's/\s+/ /g' * && **rename 's/\s\w{1}/*A-Z*/g' *** && rename 's/^\d+[[:punct:]]\s//g' * && rename "s/$artist\s//g" * && rename "s/$album\s//g" * && rename "s/($ext)//g" *
現在、rename のコードは (少なくとも十分に) 機能しており、スペース文字の後に 1 文字しか検出されていませんが、問題があるのは置換です。私は数多くの異なるアプローチを試みましたが、この場合、フォーカスされた最初の文字が正確に AZ に交換されるという結果になりました。
名前の変更のマニュアル ページでは、's/az/AZ/g' を実行すると小文字を大文字にするように書かれていますが、az AZ が見つかった場合にのみ適用されることは容易に理解できます。だから、これは私が助けを必要としているものです。
ボーナスは、誰かが sed の例のようにそれを行う方法を知っている場合です。\< は各単語の先頭に一致します。現時点では、私の名前変更コマンドは最初の単語には適用されず、どちらも適用されないためです。明らかな理由で、「ディスク名 [ディスク 1]」のようなディスクが複数ある場合。