简化复杂的音乐文件名

简化复杂的音乐文件名

我有一个很大的音乐文件目录,其标题遵循以下格式:

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)。然而我发现所有三个变体( rename, prename, file-rename) 安装在我的系统上。

答案1

您可以使用(Perl)rename

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

-n如果结果看起来不错,请删除来实际运行该操作。


如果您的文件具有正确的id3标签,最好使用这些标签重命名:

例如mp3renameexiftool

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命令已被注释,如果您对回显显示的内容感到满意,请取消注释并运行。

相关内容