1

有一个很好的重命名实用程序,它随 Perl 的安装一起提供。如何在 Perl 正则表达式中附加一个计数器?这是一个相关问题,例如当前目录中的文件编号问题:

rename 's/^/<here I'd like to have a number of a file being processed>/g' * 

例如如何重命名:

fileA
fileB
fileC

1 - fileA
2 - fileB
3 - fileC

编辑

我添加了计数器功能($c变量) - 请参见此处。它工作正常 - 但是当我尝试指定计数器格式时:

rename_c.pl -c 5.2f 's/^/$c - /' * 

它说:

 Useless use of concatenation (.) or string in void context at line 120. 

它并没有真正使用我告诉它使用的格式。这一定是第 120 行中的一些简单语法错误。你能看一下吗?

4

4 回答 4

4

基本的重命名实用程序可以很好地处理这种情况:

$ rename '$_ = sprintf "%d - %s", ++$count, $_' files...
于 2011-11-27T15:33:08.283 回答
3

有问题的代码行是:

$c = sprintf(eval("%" . "$form", $cNumber));

你不想要eval那里;您可以简单地将格式创建为字符串:

$c = sprintf("%$form", $cNumber));

字符串(第一个参数)最终包含请求的格式,以及使用该sprintf()格式的格式$cNumber

于 2011-11-27T16:13:18.590 回答
0

如果您在 macOS 上并使用通过 安装的工具brew install rename,那么以下应该可以工作:

rename -N ...01 -X -e '$_ = "${_}-counter-$N"' your_files

例子:

> rename -n -N ...01 -X -e '$_ = "${_}-counter-$N"' *.png
'iPad-Pro12.9-4g at 11.24.52.png' would be renamed to 'iPad-Pro12.9-4g at 11.24.52-counter-01.png'
'iPad-Pro12.9-4g at 11.25.09.png' would be renamed to 'iPad-Pro12.9-4g at 11.25.09-counter-02.png'
'iPad-Pro12.9-4g at 11.25.17.png' would be renamed to 'iPad-Pro12.9-4g at 11.25.17-counter-03.png'
于 2021-03-16T11:33:46.610 回答
0

perl one-liner如果您可以访问perl本身

空运行txt文件列表

perl -le '($old=$_) && s/^/++$n."-$`"/eg && print for <*.txt>'

改名

perl -le '($old=$_) && s/^/++$n."-$`"/eg && rename($old,$_) for <*.txt>'

  • perl -le运行单线
  • ($old=$_)保存旧名称
  • s/^/++$n."-$`"/eg做替换 | 请注意,它有一个反勾号
    • /^/匹配乞讨
    • ++$n从 1 开始计数器
    • ."-$`"将计数器附加到此
    • /eg全局运行并e用于评估
  • rename($old,$_)重命名$old=>$_
  • for <*.txt>循环txt文件列表

您可以使用此模式重命名所有内容,也可以使用高级重命名sprintf

截屏

在此处输入图像描述

于 2021-03-16T13:52:24.397 回答