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

发布于 2024-12-10 18:38:57 字数 398 浏览 0 评论 0原文

如何使用 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

How do I use File::Copy to rename a file extension?

So far, I can add an extension. I need to replace the file extension instead.

Example:
myfilename.txt to myfilename.dat

My code:

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");

Result: myfilename.txt.dat

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

超可爱的懒熊 2024-12-17 18:38:57

使用 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

Use File::Basename's fileparse method to find the suffix, then do a search/replace.

#!/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;

Output:

$ ./basename.pl
New filename is:baz.dat
New fullpath is:/foo/bar/baz.dat
眼角的笑意。 2024-12-17 18:38:57

一个简单的正则表达式就足够了:

$newfn = $oldfn;
$newfn =~ s/\.txt$/.dat/i;

哦,您可能还想做:

use File::Copy qw(move);

...

move($oldfn, $newfn) or die...

否则您将使用 Perl 的内置函数 重命名

A simple regex will suffice:

$newfn = $oldfn;
$newfn =~ s/\.txt$/.dat/i;

Oh, you might also want to do:

use File::Copy qw(move);

...

move($oldfn, $newfn) or die...

Otherwise you are using Perl's built-in function rename.

坚持沉默 2024-12-17 18:38:57

一点正则表达式就可以完成这项工作:

($new = $old) =~ s/[^.]+$/dat/;
rename $old, $new or die "Can't rename: $!\n";

A little regex would do the job:

($new = $old) =~ s/[^.]+$/dat/;
rename $old, $new or die "Can't rename: $!\n";
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文