我正在运行Perl脚本并尝试重命名文件,如下所示。
我在一个包含其他非相关文件的文件夹中有* .ru.jp文件列表。我想用一个我作为计数器变量获得的数字重命名。
在Bash中,我会这样做......
for i in $(ls *.ru.jp); do x=${i%%.*}; mv $i "$x"t"$counter".ru.jp ;done
如果计数器为1,则e.g myfile.ru.jp将重命名为myfilet1.ru.jp。“t”只是表示t1,t2等的命名。并且最后会有一个外部循环,最终将标记mafilet2.ru.jp等等,因为计数器变量增加。
我想知道如何在Perl脚本中编写和表示类似的for循环?
感谢。
-joey
答案 0 :(得分: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
答案 1 :(得分:7)
您可以使用Perl的文件glob和内置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++;
}
答案 2 :(得分:1)
我试过这个,似乎做了这个工作:
#! /usr/bin/perl
my $count = 0;
for (<*.ru.jp>)
{
$count++;
/(.+)\.ru\.jp/;
rename $_, $1 . "t" . $count . ".ru.jp";
}
答案 3 :(得分:1)
$count = 1;
for (<*.ru.jp>)
{
($filename)=(/^(.*?)\.ru.jp$/);
rename $_,$filename."t".$count++.".ru.jp";
}
答案 4 :(得分:1)
use strict;
my $c=0;
rename("$1.ru.jp", "$1" . $c++ . ".ru.jp") while <*.ru.jp> =~ /(.+).ru.jp/;
答案 5 :(得分:1)
my $counter=0;
while(my $file=<*.ru.jp>){
$counter++;
my ($front,$back) = split /\./,$file,2;
$newname="$front$counter".".t."."$back\n";
rename $file $newname;
}