简化复杂的音乐文件名

Bea*_*row 7 rename

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

Title_stringOfNumbers - Artist.mp3
Run Code Online (Sandbox Code Playgroud)

我的目标是删除下划线和数字,并将艺术家的名字与标题交换。

例如,原始文件名是:

whats up_7979841261 - randomArtist.mp3
Run Code Online (Sandbox Code Playgroud)

我想要的文件名:

randomArtist - whats up.mp3
Run Code Online (Sandbox Code Playgroud)

标题可以包含特殊字符('!._()/\甚至日语字符)和数字,但下划线字符和数字在文件名的第一部分中永远不会彼此相邻(因此不存在multiple word title_2_6878492178471289 - artist.mp3类似文件)。

到目前为止,我尝试使用rename终端中的命令删除下划线,但我设法遇到了障碍,因为这一行没有做任何事情,而且我不熟悉使用它。

rename 'y/_//' *
Run Code Online (Sandbox Code Playgroud)

这一切都使用 POP!_OS 21.10,所以任何适用于 Ubuntu 的东西也应该适用于我的系统。我使用了 Perl 脚本rename(随 一起安装sudo apt install rename)。但是,我发现所有三个变体renameprenamefile-rename)都安装在我的系统上。

pLu*_*umo 14

您可以使用(Perl)rename

rename -n 's/^(.*)(_\d+) - (.*)\.mp3$/$3 - $1.mp3/' *.mp3
Run Code Online (Sandbox Code Playgroud)

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


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

例如mp3renameexiftool

sudo apt install mp3rename
mp3rename -s '&a - &t'
mp3rename *.mp3
Run Code Online (Sandbox Code Playgroud)

  • 或多或少带有捕获组“(...)”的基本正则表达式。您可以在此处查看详细解释:https://regexr.com/6do4q (2认同)

sch*_*ity 5

使用循环mv和参数替换:

\n
for i in *.mp3; do\n  a="${i##* - }" # randomArtist.mp3\n  n="${i%% - *}" # whats up_7979841261\n  t="${a%%.*} - ${n//_[0-9]*/}.mp3" # randomArtist - whats up.mp3\n  echo mv -- "$i" "$t" # mv -- randomArtist - whats up.mp3 \xe2\x86\x92 whats up - randomArtist.mp3\n  # mv -- "$i" "$t"\ndone\n
Run Code Online (Sandbox Code Playgroud)\n
\n

在应用一个好主意之前,先进行备份。实际的mv命令已被注释,如果您对回显显示的内容感到满意,请取消注释并运行。

\n