如何使用 unix 命令从文件名中删除整数模式

How to remove an integer pattern from filename using unix command

我有一堆带有曲目编号前缀的 mp3 文件。例如:

01 - MovieName - SongNameA.mp3

02 - MovieName - SongNameB.mp3

我需要搜索并删除文件名中的曲目编号和连字符。

我尝试使用 find 和 grep,但找不到要使用 mv 命令进行重命名的管道查询。

使用shell

for f in [[:digit:]][[:digit:]]' - '*mp3; do mv -i -- "$f" "${f#?????}"; done

或者,同样的东西,但写成多行:

for f in [[:digit:]][[:digit:]]' - '*mp3
do
    mv -i -- "$f" "${f#?????}"
done

glob [[:digit:]][[:digit:]]' - '*mp3 匹配您感兴趣的文件。mv "$f" "${f#?????}" 删除文件名称的前五个字符。 mv-i 选项告诉它在覆盖现有文件之前询问。

使用 Perl 重命名实用程序

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

这会查看所有 .mp3 文件,如果它们的名称以两位数字开头,然后是 space,然后是破折号,然后是 space,那么这些字符是已删除。

rename 将拒绝覆盖现有文件,除非您提供 -f 选项。

本节涉及 Perl 的 rename 实用程序。请注意,某些 linux 发行版默认安装了不同且不兼容的 rename 实用程序。有时,perl rename 实用程序在名称 prename.

下可用