我正在尝试使用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/' *
有一种简单的方法吗?
答案 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
标志移动文件时不会破坏旧文件。