タイトルが次の形式に従う大規模な音楽ファイルディレクトリがあります。
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
、、、prename
)file-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
コマンドはコメントアウトされています。エコーが表示する内容に満足したら、コメントを解除して実行してください。