使用Perl的File :: Copy重命名文件扩展名

时间:2011-10-18 20:53:49

标签: perl

如何使用File::Copy重命名文件扩展名?

到目前为止,我可以添加扩展程序。我需要替换文件扩展名。

实施例: myfilename.txtmyfilename.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

3 个答案:

答案 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";