Perl的重命名 - 如何附加计数器?

时间:2011-11-24 12:26:47

标签: perl rename batch-rename

有一个很好的renaming utility,它附带Perl的安装。如何在Perl regexp中附加一个计数器?这是一个相关的问题,例如对于当前目录中的文件编号问题:

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变量) - 请参阅here。它运行正常 - 但是当我尝试指定计数器格式时:

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

它说:

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

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

4 个答案:

答案 0 :(得分:4)

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

$ rename '$_ = sprintf "%d - %s", ++$count, $_' files...

答案 1 :(得分:3)

有问题的代码行是:

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

你不希望eval在那里;您只需将格式创建为字符串:

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

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

答案 2 :(得分: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'

答案 3 :(得分: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

截图

enter image description here