使用数学运算重命名文件

kla*_*aus 6 bash perl batch-rename

我试图使用bash命令重命名一些文件,但我不知道如何在regex表达式中添加算术表达式/数学运算.

输入:

a000.png
a001.png
...
Run Code Online (Sandbox Code Playgroud)

输出继电器:

a010.png
a011.png
...
Run Code Online (Sandbox Code Playgroud)

我想在名字中添加10.

我试过的一些事情:

rename -n -e 's/a(\d+).png/a$1 + 10.png/' *
rename -n -e 's/a(\d+).png/a{$1 + 10}.png/' *
rename -n -e 's/a(\d+).png/a$($1 + 10).png/' *
Run Code Online (Sandbox Code Playgroud)

有一个简单的方法吗?

Tra*_*rke 5

这应该可以解决问题.如果你不希望前导零您可以删除sprintf的,以及"%03d"格式字符串.此外,如果要重命名的文件始终a,则还可以[a-zA-Z]*使用文字字符取代前导正则表达式a.最后,虽然*文件说明符可能足够,但我建议将扩展名作为额外的安全预防措施(例如*.png).

与往常一样,首先使用-n标志来验证重命名是否正确.

rename -v 's/([a-zA-Z]*)([0-9]*)/$1.sprintf("%03d",$2+10)/e' *
Run Code Online (Sandbox Code Playgroud)

  • @klaus - 我想知道你是否遇到了这个问题...你的`ls | sort -r`解决方案来反转_does_工作的顺序,但你还必须从`rename`命令的末尾删除`*`,因为如果没有提供名称作为参数,它只从STDIN读取文件名. (2认同)
  • @klaus - 嗯...如果你用`-f`"解决"它,你可能想要仔细检查你的文件及其内容.如果你从`a001`,'a011`和`a021`开始并使用`rename -f`,你将只得到一个文件`a031`,它将包含`a001`的原始内容.`a011`和`a021`将被销毁.我认为这不是你想要的结果. (2认同)