首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简化复杂的音乐文件名

简化复杂的音乐文件名
EN

Unix & Linux用户
提问于 2022-01-20 08:48:50
回答 2查看 910关注 0票数 7

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

代码语言:javascript
复制
Title_stringOfNumbers - Artist.mp3

我的目标是删除下划线,后面跟着数字,并将艺术家的名字与标题切换。

例如,原始文件名是:

代码语言:javascript
复制
whats up_7979841261 - randomArtist.mp3

我想要的文件名:

代码语言:javascript
复制
randomArtist - whats up.mp3

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

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

代码语言:javascript
复制
rename 'y/_//' *

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

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2022-01-20 09:29:57

您可以使用(Perl) rename

代码语言:javascript
复制
rename -n 's/^(.*)(_\d+) - (.*)\.mp3$/$3 - $1.mp3/' *.mp3

删除-n,以便在结果良好的情况下实际运行操作。

如果您的文件有正确的id3标记,最好使用以下标记重命名:

例如mp3renameexiftool

代码语言:javascript
复制
sudo apt install mp3rename
mp3rename -s '&a - &t'
mp3rename *.mp3
票数 14
EN

Unix & Linux用户

发布于 2022-01-20 09:37:18

使用循环、mv和参数替换:

代码语言:javascript
复制
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命令,然后取消注释并运行。

票数 5
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/687159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档