我希望能够重命名具有不同扩展名的perl文件,只要文件名相同即可。例如,
ExampleFile.txt
ExampleFile.html
FirstFile.txt
我希望我可以在Linux上使用Perl单行代码来更改包含字符串“ ExampleFile”作为名称的文件,而不管其扩展名是“ FinalFile”如何,但不适用于任何其他文件(例如“ FirstFile”)。我一直在调查,rename
但似乎无法弄清楚如何将其用于任何文件扩展名。
这样做rename "$findstring.*", "$replacestring.*";
似乎不起作用,因为perl无法识别*
代表任何文件扩展名。
这是一个示例代码,可以显示我的问题。
#!/usr/bin/perl
use strict;
use warnings;
my $findstring = "ExampleFile";
my $replacestring = "FinalFile";
rename ("myDir/$findstring.*", "myDir/$replacestring.*");
rename
我相信大多数系统都会附带一个工具(例如,CentOS7拥有)
手册页简短,带简介和说明
重命名[选项]表达式 替换 文件...
重命名将通过替换的第一次出现重命名指定的文件表达通过在他们的名字替换。
其次是一个例子,它不完全是基本的,但希望是清楚而有用的。
就你而言
rename ExampleFile NewName ExampleFile.*
应该是您所需要的。
另一种方法是在Perl中执行此操作
perl -MFile::Basename -MFile::Copy=move -wE'
for (@ARGV) {
($name, $path, $ext) = fileparse($_, qr/\.[^.]*/);
say "Rename: $_ to $path/NewName$ext";
#move $_, "$path/NewName$ext"
}
' ExampleFile*
取消对行的注释后,它将全部重命名ExampleFile.*
为NewName
具有相同扩展名move
。就目前而言,它仅会打印将要执行的操作,因此可以先对其进行全面测试。
它使用File :: Basename ::fileparse
查找在命令行上提交的每个文件的文件名组成部分,然后使用File :: Copy重命名每个文件。还有其他解析文件名和其他模块的方法。
这是一个用于快速复制粘贴测试的命令行程序。请将其转换为脚本,并进行适当的错误检查。然后,您可以使用Getopt :: Long制作一个具有更好调用效果的实用程序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句