bash - 使用数学运算重命名文件

标签 bash perl batch-rename

我正在尝试使用 bash 命令重命名一些文件,但我不知道如何将算术表达式/数学运算添加到正则表达式中。

输入:

a000.png
a001.png
...

输出:

a010.png
a011.png
...

我正在尝试将 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/' *

有没有简单的方法可以做到这一点?

最佳答案

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

As always, try it out first using the -n flag to verify the rename is correct.

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

关于bash - 使用数学运算重命名文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47783117/

相关文章:

linux - 如何在一定时间内循环?

linux - bash 脚本在显示图像时失去焦点

linux - Bash 在执行之前检查文件写入完成

linux - 在 Perl 中测试 Device::SerialPort 上的数据是否可用

php - Perl 相当于 PHP 的 escapeshellarg

powershell - "Media created"的变量? (电源外壳)

linux - 显示名称包含空格的文件大小

php - 使用 perl DB_File 创建文件时如何指定 BerkeleyDB 的版本?

regex - 如何将文件名的一部分移动到不同位置

按顺序批量重命名文件的 PowerShell 命令