使用终端和正则表达式重命名以删除文件名中的前导数字

使用终端和正则表达式重命名以删除文件名中的前导数字

我希望重命名以下文件,删除序列号。

01 X.mp3X.mp3

02 Add Me In.mp3Add Me In.mp3

我正在尝试使用下面的重命名命令。

rename -v -n 's/^\d+\s*([a-z]+\.mp3)$/$1\.mp3/' *.mp3

运行这个命令给我这个错误:

Using expression: sub { use feature ':5.18'; s/^\d+\s*([a-z]+\.mp3)$/$1\.mp3/ }

答案1

我不明白为什么会发生该错误。事实上,我相当确定错误的行数比您显示的要多;一方面,没有实际的错误消息。

但是,该正则表达式实际上不会与您的任何一个示例文件匹配。您使用的[a-z]+\.mp3只会匹配小写字母,并且由于您一直匹配扩展名,因此它只会匹配名称包含以下内容的文件仅有的要删除的数字和空格后面的小写字母。您可以使用 match[a-zA-Z]或 uses///i使匹配不区分大小写,但最好完全不匹配单词的其余部分。您只想从开头删除数字和空格,因此只需匹配它们即可:

rename -vn 's/^\d+\s+//' *mp3

答案2

解决方案使用参数扩展

for i in *.mp3 ; do mv "$i" "${i#"${i%%[!0-9 ]*}"}" ; done
  • ${i%%[!0-9 ]*}从第一个非数字/非空格字符删除直到结束。
  • 剩余的字符被传递到变量${i#,然后从i变量的开头删除它们,从而得到所需的文件名,没有起始数字和空格

答案3

删除它将-n使其工作。-n意思是“只打印结果而不是改变它”。

相关内容