如何在文件名中使用前导零来增加数字

How to increment number with leading zeros in filename

我有一组文件,不一定具有相同的扩展名。这些文件是由 Python 脚本创建的,该脚本遍历某些文件(比如 x.jpg、y.jpg 和 z.jpg),然后用零填充对它们进行编号,以便数字的长度为 7 个字符(在此示例中,文件名变为 0000001 - x.jpg0000002 - y.jpg0000003 - z.jpg)。

我现在需要一个脚本(任何语言都可以,但 Bash/zsh 是首选),它将通过参数递增这些数字。从而重命名目录中的所有文件。例如,我想将该程序称为(假设 Shell 脚本):

./rename.sh 5

最后的文件名中的数字要补7,保证没有文件初始编号为9999999,所以得到的文件应该是0000006 - x.jpg0000007.jpg0000008.jpg。保证所有文件最初都是增量的;也就是说,数字上没有差距。

我在 Bash 似乎根本无法轻松做到这一点,即使在 Python 也似乎有点像一件苦差事。最好的方法是什么?

编辑:好的,这是我到目前为止所做的努力。我认为前导 0 是个问题,所以我使用重命名删除了它们:

rename 's/^0*//' *

现在只剩下数字了,我最好使用循环,像这样,但我不完全熟悉语法以及为什么这是错误的:

for file in "(*) - (*)" ; do mv "${file}" "$((+5)) - " ; done

那里的 5 只是硬编码的,但我想将其更改为第一个参数应该没什么大不了的。然后我可以使用另一个循环将 0 添加回来。

import sys, glob, re, os
# Get the offset at the first command-line argument
offset = int(sys.argv[1]) 

# Go through the list of files in the reverse order
for name in reversed(glob.glob('*.jpg')):
    # Extract the number and the rest of the name
    i, rest = re.findall("^(\d+)(.+)", name)[0]
    # Construct the new file name
    new_name = "{:07d}{}".format(int(i) + offset, rest)
    # Rename
    os.rename(name, new_name)