使用命令行或perl批量重命名JPG文件?

时间:2013-05-03 16:58:02

标签: perl shell unix

我在一个文件夹中有519个JPG文件,我需要大量重命名。在newnames.txt文件中,我有一个519个新文件名的列表。有没有办法通过命令行或perl来运行名称列表(每个都在新行上)并重命名所有文件?

1 个答案:

答案 0 :(得分:0)

由于您没有指定如何将文件名映射到“newnames.txt”数据,我将提供几个解决方案:

如果文件名按字母顺序排序,并且新名称的顺序与该顺序相对应:

use File::Slurp; 
use File::Copy qw/move/;
my @newnames=read_file("newnames.txt");
chomp(@newnames);
my @files = glob("*.JPG");
for (my $i=0; $i < @files; $i++) {
    die "Not enough new names for file $files[$i]" unless $newnames[$i];
    move($files[$i], $newnames[$i])
          or die "Failed to move $files[$i] to $newnames[$i] : $!";
}

如果文件名与新名称在同一个文件中,则在2列中:

use File::Slurp; 
use File::Copy qw/move/;
my @newnames=read_file("newnames.txt");
chomp(@newnames);
foreach my $line (@newnames) {
    my ($file, $new)= split(/,/, $line);
    move($file, $new)
          or die "Failed to move $file to $new : $!";
}