使用正则表达式重命名mp3

时间:2011-12-17 09:48:34

标签: regex

我想组织我的mp3文件并使用模式重命名:artist - song。

我需要一个正则表达式,选择第一个短划线前的所有单词,然后选择最后一个短划线和后面的所有字符。

在这个例子中,[09]一个倒下的系统 - 毒性 - 03 - Chop Suey.mp3:

  1. 第一个破折号之前的所有单词项:向下的系统
  2. 最后一个破折号: -
  3. 最后一次冲刺后的其他一切:Chop Suey.mp3
  4. 我该怎么做?

4 个答案:

答案 0 :(得分:0)

如果您使用的是Windows,我强烈建议您使用免费软件程序:MP3Tag。它可以轻松地进行您要求的重命名(以及更多)。

答案 1 :(得分:0)

有一个linux命令rename,这正是你想要的 例如,要重命名与“* .bak”匹配的所有文件以剥离扩展名,您可以说

rename 's/\.bak$//' *.bak

要将大写名称翻译为较低的名称,请使用

rename 'y/A-Z/a-z/' *

重命名 [09]体力衰竭 - 03 - Chop Suey.mp3 毒性 - Chop Suey.mp3

# you should rewrite regex to meet your requirement
rename 's/.*-(.*)-.*-(.*)/$1 - $2/' *.mp3

这是一款Windows音乐播放器foobar2000,可以很好地完成这项工作 属性 - > 其他字段的格式......

答案 2 :(得分:0)

可能会有所帮助 -

sed 's/[[0-9]\+] \([A-Za-z ]*[^-]\) -.*[^-]- \(.*\)/\1-\2/'

<强>测试

[jaypal:~/temp] echo "[09] System Of A Down -Toxicity - 03 - Chop Suey.mp3" | 
sed 's/[[0-9]\+] \([A-Za-z ]*[^-]\) -.*[^-]- \(.*\)/\1 - \2/'
System Of A Down - Chop Suey.mp3

OR

awk -F"-" '{print $1"-"$4}' | sed 's/[[0-9]\+] //g'

<强>测试

[jaypal:~/temp] echo "[09] System Of A Down -Toxicity - 03 - Chop Suey.mp3" | 
awk -F"-" '{print $1"-"$4}' | sed 's/[[0-9]\+] //g'
System Of A Down - Chop Suey.mp3

答案 3 :(得分:0)

您可以通过(-.*-)找到“中间模式”并替换为-。要删除号码,您可以使用(\[[0-9]*\])