2013-05-03 5 views
-2

У меня есть 519 файлов JPG в папке, которую мне нужно для массового переименования. В файле newnames.txt у меня есть список 519 новых имен файлов. Есть ли способ через командную строку или perl запустить этот список имен (каждый в новой строке) и переименовать все файлы?Массовое переименование файлов JPG с использованием командной строки или perl?

+1

взглянуть на 'rename' полезности. Если это не поможет, вам необходимо обновить свой вопрос, как вы выполняете сопоставление между newnames.txt и фактическими именами файлов. Базовый цикл bash выглядит так: 'while read nn; do echo $ nn; done

+0

Посмотрите на функцию 'move' в модуле File :: Copy'. – Nate

+1

1. Что вы сделали до сих пор? 2. Каков формат newnames.txt? –

ответ

0

Поскольку вы не указали, как вы отобразить имена файлов с данными «newnames.txt», я дам несколько решений:

Если имена файлов сортируются в алфавитном порядке, и порядок newnames соответствует тому порядка :

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 : $!"; 
} 
Смежные вопросы