我有一组文件,不一定具有相同的扩展名。这些文件是由Python脚本创建的,该脚本对某些文件(例如x.jpg,y.jpg和z.jpg)进行迭代,然后使用零填充对其进行编号,以使这些数字的长度为7个字符(在此示例中) ,文件名分别为0000001 - x.jpg
,0000002 - y.jpg
和0000003 - z.jpg
)。
我现在需要一个脚本(任何语言都可以,但是Bash / zsh是首选),它将通过一个参数增加这些数字。从而重命名目录中的所有文件。例如,我想调用该程序为(假设使用Shell脚本):
./rename.sh 5
最终文件名中的数字应填充为长度7,并确保最初没有文件号为9999999。因此,结果文件应为0000006 - x.jpg
,0000007.jpg
,{{1 }}。确保最初所有文件都是增量文件;也就是说,数字之间没有差距。
在Bash中,我似乎根本不容易做到这一点,即使在Python中,这似乎也很繁琐。最好的方法是什么?
编辑:好的,到目前为止,这是我的努力。我认为前导0是个问题,因此我使用重命名将其删除:
0000008.jpg
现在只剩下数字了,理想情况下,我会使用一个类似这样的循环,但是我对语法以及为什么这是错误的并不十分熟悉:
rename 's/^0*//' *
5只是硬编码,但我想将其更改为第一个参数应该没什么大不了的。然后,我可以使用另一个循环将0加回来。
答案 0 :(得分: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)