Как переименовать файлы в цикле for в Perl - PullRequest
3 голосов
/ 23 декабря 2009

Я запускаю Perl-скрипт и пытаюсь выполнить переименование файлов, как показано ниже ..

У меня есть список файлов * .ru.jp в папке с другими несвязанными файлами. Я хотел бы переименовать с номером, который я получил в качестве переменной счетчика.

В Bash я бы сделал как ...

for i in $(ls *.ru.jp); do x=${i%%.*}; mv $i  "$x"t"$counter".ru.jp ;done

E.g myfile.ru.jp будет переименован в myfilet1.ru.jp, если счетчик равен 1. «t» - это просто имя, обозначающее t1, t2 ... и т. Д. И прежде всего существует внешний цикл, который в конечном итоге будет помечен как mafilet2.ru.jp и т. Д. По мере увеличения переменной counter.

Я хотел бы знать, как я мог бы написать и представить подобное для цикла, как в скрипте Perl?

Спасибо.

-joey

Ответы [ 6 ]

8 голосов
/ 23 декабря 2009
perl -e 'for $old (@ARGV) {
           ++$counter;
           if (($new=$old) =~ s/(\.ru\.jp)\z/t$counter$1/) {
             rename $old => $new or warn "$0: rename: $!\n";
           }
         }' *.ru.jp
7 голосов
/ 23 декабря 2009

Вы можете использовать файловый глобус Perl и встроенную функцию rename следующим образом:

use warnings;
use strict;

my $i = 1;
for (<*.ru.jp>) {
    my $file = $_;
    s/\.ru\.jp$//;
    my $new = $_ . 't'. $i . '.ru.jp';
    rename $file, $new or die "Can not rename $file as $new: $!";
    $i++;
}
1 голос
/ 23 декабря 2009
my $counter=0;
while(my $file=<*.ru.jp>){
    $counter++;
    my ($front,$back) = split /\./,$file,2;
    $newname="$front$counter".".t."."$back\n";
    rename $file $newname;
}
1 голос
/ 23 декабря 2009
use strict;
my $c=0;
rename("$1.ru.jp", "$1" . $c++ . ".ru.jp") while <*.ru.jp> =~ /(.+).ru.jp/;
1 голос
/ 23 декабря 2009
$count = 1;
for (<*.ru.jp>)
{
        ($filename)=(/^(.*?)\.ru.jp$/);
        rename $_,$filename."t".$count++.".ru.jp";
}
1 голос
/ 23 декабря 2009

Я попробовал это, и похоже, что делает работу:

#! /usr/bin/perl

my $count = 0;
for (<*.ru.jp>)
{
        $count++;
        /(.+)\.ru\.jp/;
        rename $_, $1 . "t" . $count . ".ru.jp";
}
...