複雑な音楽ファイル名を簡素化

複雑な音楽ファイル名を簡素化

タイトルが次の形式に従う大規模な音楽ファイルディレクトリがあります。

Title_stringOfNumbers - Artist.mp3

私の目標は、アンダースコアと数字を削除し、アーティスト名をタイトルに変更することです。

たとえば、元のファイル名は次のようになります。

whats up_7979841261 - randomArtist.mp3

私が欲しいファイル名:

randomArtist - whats up.mp3

'タイトルには特殊文字(、、、、、、、さらには!日本語.の文字まで)と数字を含めることができますが、ファイル名の最初の部分では_アンダースコアと数字は互いに隣り合ってはいけません(したがって同様のファイルは存在しません)。()/\multiple word title_2_6878492178471289 - artist.mp3

renameこれまで、端末でコマンドを使用してアンダースコアを削除しようとしましたが、この行は何も実行せず、使い慣れていないために問題が発生しました。

rename 'y/_//' *

これはすべてPOP!_OS 21.10を使用するため、Ubuntuで動作するすべてが私のシステムでも機能するはずです。私はPerlスクリプトを使用しましたrename(一緒にインストールされていますsudo apt install rename)。しかし、私が見つけた3つのバリエーションrename、、、prenamefile-renameが私のシステムにインストールされました。

答え1

(Perl)を使用できますrename

rename -n 's/^(.*)(_\d+) - (.*)\.mp3$/$3 - $1.mp3/' *.mp3

-n結果が良い場合は、削除して実際にタスクを実行してください。


ファイルに正しいタグがある場合は、id3次のタグを使用して名前を変更することをお勧めします。

たとえば、mp3renameまたはexiftool

sudo apt install mp3rename
mp3rename -s '&a - &t'
mp3rename *.mp3

答え2

ループmvとパラメータの代替使用:

for i in *.mp3; do
  a="${i##* - }" # randomArtist.mp3
  n="${i%% - *}" # whats up_7979841261
  t="${a%%.*} - ${n//_[0-9]*/}.mp3" # randomArtist - whats up.mp3
  echo mv -- "$i" "$t" # mv -- randomArtist - whats up.mp3 → whats up - randomArtist.mp3
  # mv -- "$i" "$t"
done

良いアイデアを適用する前にバックアップを作成してください。実際のmvコマンドはコメントアウトされています。エコーが表示する内容に満足したら、コメントを解除して実行してください。

関連情報