如何在Perl中的for循环中重命名文件

joe*_*oey 3 perl loops for-loop rename file-rename

我正在运行Perl脚本并尝试重命名文件,如下所示.

我有一个包含其他非相关文件的文件夹中的*.ru.jp文件列表.我想用一个我作为计数器变量获得的数字重命名.

在Bash中,我会这样做......

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

例如,如果计数器是1,myfile.ru.jp将被重命名为myfilet1.ru.jp."t"只是一个命名,表示t1,t2 ......等.并且最后会有一个外部循环,最终将标记mafilet2.ru.jp等等,因为计数器变量增加.

我想知道如何在Perl脚本中编写和表示类似for循环?

谢谢.

-joey

Gre*_*con 8

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
Run Code Online (Sandbox Code Playgroud)

  • 我有点像你在这里使用胖逗号(=>)来显示旧文件变成新的:) (6认同)
  • 并且认为人们说Perl代码是不可读的! (4认同)

too*_*lic 7

您可以使用Perl的文件glob和内置重命名函数,如下所示:

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++;
}
Run Code Online (Sandbox Code Playgroud)