【发布时间】:2015-11-10 18:05:31
【问题描述】:
我有一堆以曲目号为前缀的 mp3 文件。例如:
01 - MovieName - SongNameA.mp3
02 - MovieName - SongNameB.mp3
我需要从文件名中搜索并删除曲目号和连字符。
我尝试使用 find 和 grep,但找不到要使用 mv 命令重命名的管道查询。
【问题讨论】:
我有一堆以曲目号为前缀的 mp3 文件。例如:
01 - MovieName - SongNameA.mp3
02 - MovieName - SongNameB.mp3
我需要从文件名中搜索并删除曲目号和连字符。
我尝试使用 find 和 grep,但找不到要使用 mv 命令重命名的管道查询。
【问题讨论】:
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 选项告诉它在覆盖现有文件之前询问。
rename 's/^\d\d - //' *mp3
这会查看所有 .mp3 文件,如果它们的名称以两位数字开头,后跟空格,后跟破折号,再跟空格,则删除这些字符。
rename 将拒绝覆盖现有文件,除非您提供 -f 选项。
本节引用 Perl 的 rename 实用程序。请注意,某些 Linux 发行版默认安装了不同且不兼容的 rename 实用程序。有时,perl rename 实用程序在名称 prename 下可用。
【讨论】:
01 - MovieName - SongNameA.mp3 和 02 - MovieName - SongNameA.mp3 的文件会发生什么?