如何在文件扩展名 .mp3 之前添加递增数字

如何在文件扩展名 .mp3 之前添加递增数字

来自夏威夷的阿罗哈,

我希望一切都好。在终端中,我试图使音频文件扩展名 .mp3、.wav、.m4p、.aiff、.m4a 的所有文件名都是唯一的。我有数千个,因此为了做到这一点,我需要在文件扩展名之前添加额外的递增数字。文件名应保留。

例如:snoopdog.mp3、music2010.wav、stackexchange.aiff、youtubemusic.mp3、facebookmusic.m4a、twittermusic.aiff

最终结果:snoopdog1.mp3、music20102.wav、stackexchange3.aiff、youtubemusic4.mp3、facebookmusic5.m4a、twittermusic6.aiff

请问如何在终端中执行此操作。谢谢!

答案1

像这样的东西:

i=1
for file in ./*; do
    ext=${file##*.}
    basename=${file%.*}
    mv -n -- "$file" "$basename$i.$ext"
    i=$((i+1))
done

会给你facebookmusic1.m4a music20102.wav snoopdog3.mp3 stackexchange4.aiff twittermusic5.aiff youtubemusic6.mp3。顺序来自默认的字典排序,因此字母f排在第一位,等等。

这将重命名当前目录中的所有文件,但如果您只想更改具有该表达式的文件,您可以执行以下任一操作

for file in *.mp3 *.aiff *.m4a *.wav; do
    if [ -f "$file" ]; then
        ...
    fi
done

或者

shopt -s extglob
for file in *.@(mp3|aiff|m4a|wav); do
    ...

其中第一个应该在所有 shell 中工作,但会影响排序顺序,而后者可以在 Bash 中工作。 (在 ksh 中同样有效,无需在 zsh 中shopt使用 , 或使用*.(mp3|aiff|m4a|wav)。)


使用 Perl工具,滥用和变量rename的特殊状态,您可以达到类似的效果(尽管如果有多个点,这将替换第一个点):$a$b

rename -v 's/\./ ++$a . "." /e' *

相关内容