重命名一堆文件:切换运行号码

时间:2014-03-09 16:16:48

标签: perl rename

我想用名称结构重命名数千个文件: IMAGE_6290.JPG最多IMAGE_9999.JPG

成: image_0001.JPG最多image_3710.JPG

所以基本上应该按6289

进行转换

我已经尝试过rename命令(在Debian 7.0下),但我不知道如何减去两个变量。

我最好的尝试是:

rename -n 's/(\d{4})\.JPG$/_$1-6289\.JPG/' *.JPG

但它给出的结果如下: IMAGE6484.JPG已重命名为IMAGE_6484-6289.JPG

有任何帮助吗?

非常感谢!

2 个答案:

答案 0 :(得分:2)

rename -n 's/(\d{4})\.JPG$/sprintf("_%04d.JPG",$1-6289)/e' *.JPG

答案 1 :(得分:0)

看起来你想在命令行中这样做,但是在Perl中(因为你有标签),你可以使用 baby cart运营商。

#!/usr/bin/perl
use strict;
use warnings;

my @jpg_files = glob "*.JPG";

foreach my $file (@jpg_files){
    if (my $new_name = $file =~ s/(\d{4}).JPG/_@{[$1 - 6289]}.JPG/r) {
        rename $file, $new_name;
    }

    # or simply
    rename $file , $file =~ s/(\d{4}).JPG/_@{[$1 - 6289]}.JPG/r;
}