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

Sne*_*ish 2 shell regular-expression rename macintosh

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

01 X.mp3X.mp3

02 Add Me In.mp3Add Me In.mp3

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

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

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

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

ter*_*don 7

我不明白为什么会发生这个错误。事实上,我有理由确定错误的行比你显示的多;一方面,没有实际的错误消息。

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

rename -vn 's/^\d+\s+//' *mp3
Run Code Online (Sandbox Code Playgroud)


Sun*_*eep 5

使用参数扩展的解决方案

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