增加多个文件前缀?

Increment of multiple file prefixes?

我正在 Bash 中寻找重命名文件前缀的方法。 这些文件都在一个文件夹中。里面不会有其他文件。

00 - Artist - Title.mp3
01 - Artist - Title.mp3

...等等

01 - Artist - Title.mp3
02 - Artist - Title.mp3

...等等

前缀也可以只有一个(0, 1, 2, ...), 双(00, 01, 02, ...), 三重, ... 前缀。

Perl 解决方案:

perl -we 'for (@ARGV) {
              my ($n, $r) = /^([0-9]+)(.*)/;
              rename $_, sprintf("%0" . length($n) . "d", 1 + $n) . $r;
          }' *.mp3

正则表达式匹配提取数字到$n,其余到$r。 $n + 1 然后由 sprintf 格式化为零填充,具有与原始数字相同的长度。

请注意,它会更改 9、99 等的号码长度

这是一项冒险的工作,但这是一个似乎有效的 sh 解决方案:

ls *.mp3 | sort -rn | while read f
do 
    number=`echo "$f" | sed 's/ .*//'`
    rest=`echo "$f" | sed 's/^[^ ]* //'`

    number2=`expr $number + 1`
    number2f=`printf %02d $number2`

    mv -i "$number $rest" "$number2f $rest"
done

sort -rn 这样如果有 adjacently-numbered 个文件具有相同的艺术家和标题,它就不会尝试覆盖任何内容(这可能不会发生,尽管如果我把你的字面上的例子)。

mv -i 所以它会在覆盖任何内容之前询问您是否有任何这些情况无论如何都会出现。

如果您喜欢将 $f 分解为 $number$rest 之类的更简洁的方法,欢迎光临。