【问题标题】:rename part of the filename using perl使用 perl 重命名文件名的一部分
【发布时间】:2014-01-22 09:44:29
【问题描述】:

我想使用 perl 重命名文件的一部分。我知道如何重命名有空格的文件名,我这样做是因为文件名有“我的 123.log”。此代码会将其重命名为 new_123.log。

foreach my $i (<"my *.log">) {

my $y = $i; # save the original file name

$i =~ s/my /new_/; # replace the spaces with a _ character

rename ( $y, $i ); # rename the original file with the new name

现在我想重命名名为 my.123.log 的文件,我很困惑如何处理这个 '.'在文件名中。如果我想重命名一个以我的名字开头的文件名(更不用说我的 123.log),那么这个命令可以吗?我想使用它,因为我只知道文件名的开头

move '../my *.log', '../new.log' or die "cant change the name";

【问题讨论】:

  • 原始日志的所有可能的名称是什么?有多个选项很难解释它们。
  • 日志文件以 my 开头,然后是日期和时间,如 my.22-1-2014-00-33-57.log 所以我只想将 my 编辑为新的跨度>
  • 是的,我定义为use File::Copy qw(move);

标签: perl


【解决方案1】:

我认为您希望在将其交给move 之前找到该模式。上面的move 语句将覆盖除最后一个之外的所有输入文件。因此,您可以使用括号“保存”匹配的内容(一次或多次):

/^my\s([a-z0-9])\.log/;

#try this first please
print "move '../my $1.log', '../new$1.log' or die "cant _overwrite_ the file";

#and if that looks ok then try uncommenting this:
#move '../my $1.log', '../new$1.log' or die "cant _overwrite_ the file";

我没有时间测试我的正则表达式,字符类匹配可能需要修改为一次或多次,或者如果您认为文件名中包含字母数字以外的字符,则需要对其进行扩展。

【讨论】:

  • 您好,感谢您的帮助,您的脚本只是打印打印中写的内容,我删除了打印并尝试了它,但它仍然对我不起作用
  • 不要删除打印,取消注释最后一行move '../my $1.log', '../new$1.log' or die "cant _overwrite_ the file";
  • 我评论了最后一行,以便您可以先查看打印内容,以确保移动(或可能覆盖)确实是您想要发生的。如果您不小心,您可能无法撤消这些文件系统操作。
猜你喜欢
  • 2020-01-29
  • 2010-11-26
  • 2011-12-03
  • 1970-01-01
  • 2018-07-23
  • 2022-08-18
  • 1970-01-01
  • 2011-12-01
  • 2018-12-31
相关资源
最近更新 更多