加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 21:54:54 所属栏目:大数据 来源:网络整理
导读:我想要一个目录和所有电子邮件(* .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 //; ren
我想要一个目录和所有电子邮件(* .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: $oldn";
}

解决方法

如果./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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读