使用数学运算重命名文件

时间:2017-12-12 23:16:47

标签: bash perl batch-rename

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

输入:

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/' *

有一种简单的方法吗?

2 个答案:

答案 0 :(得分:5)

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

  

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

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

答案 1 :(得分:0)

如果您不想使用rename重命名,则仍然可以使用bash语法。我有一堆旧日志需要转移5天,如:

log.365.gz -> log.370.gz
log.364.gz -> log.369.gz
...

我使用了for循环向后计数:

for date in {365..1}; do
    mv -nv log.$date.gz log.$(date+5).gz
done

-n标志移动文件时不会破坏旧文件。