如何使用File::Copy
重命名文件扩展名?
到目前为止,我可以添加扩展程序。我需要替换文件扩展名。
实施例:
myfilename.txt
至myfilename.dat
我的代码:
use strict;
use warnings;
use File::Copy;
my ($oldfn) = qw (myfilename.txt);
my $newfn = $oldfn . ".dat";
rename($oldfn, $newfn)
or die("Can't rename: $!\n");
结果:myfilename.txt.dat
答案 0 :(得分:2)
使用File :: Basename的fileparse方法查找后缀,然后进行搜索/替换。
#!/usr/bin/env perl use strict; use warnings; use feature qw(say); use File::Basename qw(fileparse); my $oldfilename = "/foo/bar/baz.txt"; my($filename, $directories, $suffix) = fileparse($oldfilename,qr/\.[^.]*$/); $filename =~ s/\.$suffix$//; my $newfilename = $filename.".dat"; say "New filename is:".$newfilename; say "New fullpath is:".$directories.$newfilename; exit 0;
输出:
$ ./basename.pl New filename is:baz.dat New fullpath is:/foo/bar/baz.dat
答案 1 :(得分:1)
一个简单的正则表达式就足够了:
$newfn = $oldfn;
$newfn =~ s/\.txt$/.dat/i;
哦,你可能也想这样做:
use File::Copy qw(move);
...
move($oldfn, $newfn) or die...
否则,您使用的是Perl的内置函数rename。
答案 2 :(得分:1)
一个小正则表达式可以完成这项工作:
($new = $old) =~ s/[^.]+$/dat/;
rename $old, $new or die "Can't rename: $!\n";