我有一个很大的音乐文件目录,其标题遵循以下格式:
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
标签,最好使用这些标签重命名:
例如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
命令已被注释,如果您对回显显示的内容感到满意,请取消注释并运行。