使用数学运算重命名文件

Rename files using math operations

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

输入:

a000.png
a001.png
...

输出:

a010.png
a011.png
...

我正在尝试将 10 添加到名称中。

我试过的一些东西:

rename -n -e 's/a(\d+).png/a + 10.png/' *
rename -n -e 's/a(\d+).png/a{ + 10}.png/' *
rename -n -e 's/a(\d+).png/a$( + 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]*)/.sprintf("%03d",+10)/e' *

如果您不想使用 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 标志移动了文件而没有破坏旧文件。