使用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('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 您可能希望使用 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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |