gpt4 book ai didi

regex - 使用任何扩展名重命名 perl 文件

转载 作者:太空狗 更新时间:2023-10-29 11:25:00 24 4
gpt4 key购买 nike

我希望能够重命名不同扩展名的 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 [options] expression replacement file...

rename will rename the specified files by replacing the first occurrence of expression in their name by replacement.

接着是一个示例,虽然不是很基础,但希望清晰且有用。

在你的情况下

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 创建一个更好的实用工具.

关于regex - 使用任何扩展名重命名 perl 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57644370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com