使用Perl重命名目录中的文件

前端之家收集整理的这篇文章主要介绍了使用Perl重命名目录中的文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想要一个目录和所有电子邮件(* .msg)文件,删除开头的’RE’.我有以下代码重命名失败.
opendir(DIR,'emails') or die "Cannot open directory";
@files = readdir(DIR);
closedir(DIR);

for (@files){
    next if $_ !~ m/^RE .+msg$/;
    $old = $_;
    s/RE //;
    rename($old,$_) or print "Error renaming: $old\n";
}

解决方法

如果./emails目录包含以下文件
1.msg
2.msg
3.msg

然后你的@files看起来像(‘.’,’..’,’1.msg’,’2.msg’,’3.msg’),但你的重命名需要像’emails / 1.msg’这样的名字,’emails / 2.msg’等等,所以在重命名之前你可以chdir

chdir('emails');
for (@files) {
    #...
}

您可能也想检查chdir返回值.

或者自己添加目录名称

rename('emails/' . $old,'emails/' . $_) or print "Error renaming $old: $!\n";
# or rename("emails/$old","emails/$_") if you like string interpolation
# or you could use map if you like map

您可能希望使用grep组合目录读取和过滤:

my @files = grep { /^RE .+msg$/ } readdir(DIR);

甚至这个:

opendir(DIR,'emails') or die "Cannot open directory";
for (grep { /^RE .+msg$/ } readdir(DIR)) {
    (my $new = $_) =~ s/^RE //;
    rename("emails/$_","emails/$new") or print "Error renaming $_ to $new: $!\n";
}
closedir(DIR);

猜你在找的Perl相关文章