2016-05-17 5 views
0

Мне нужно изменить часть названия файлов в директории, я использую следующий код, но он только печатает в терминале модификация строки, но не сохранить егоизменить имя файла в директории

my @files = glob("*.grb *.out"); 
foreach my $file (@files) { 
    print "$file\n"; 
    s/d02/d03/g; 
} 

Как я могу получить их со строкой d03 вместо g d02?

+1

Приведенный выше код не печатает измененное имя файла на терминал. Сначала вы печатаете его, а затем вы делаете замену на неинициализированное значение (переменная '$ _'). Просьба вставить код, который вы действительно пробовали, что представляет собой наилучшую попытку решить проблему. –

+2

См. [Rename] (http://p3rl.org/rename). – choroba

ответ

1
my @files = glob("*.grb *.out"); 
foreach my $file (@files) { 
    (my $newName = $file) =~ s/d02/d03/g; 
    rename $file, $newName; 
} 

Или если у вас есть Perl 5.14+,

my @files = glob("*.grb *.out"); 
foreach my $file (@files) { 
    my $newName = $file =~ s/d02/d03/gr; 
    rename $file, $newName; 
} 

Это будет переименовать все файлы в *d02**d03* файлы (на диске).

+0

Спасибо @Perl Dog –

+0

Спасибо @ikegami за дополнение. Я все еще не привык к '/ r'. Ahhrg. И я использовал CamelCase. Мне стыдно. Простите за это. – PerlDuck

Смежные вопросы