[英]How to increment number with leading zeros in filename
我有一組文件,不一定具有相同的擴展名。 這些文件是由Python腳本創建的,該腳本對某些文件(例如x.jpg,y.jpg和z.jpg)進行迭代,然后使用零填充對其進行編號,以使這些數字的長度為7個字符(在此示例中) ,文件0000001 - x.jpg
0000002 - y.jpg
0000001 - x.jpg
, 0000002 - y.jpg
和0000003 - z.jpg
)。
我現在需要一個腳本(任何語言都可以,但是Bash / zsh是首選),它將通過一個參數增加這些數字。 從而重命名目錄中的所有文件。 例如,我想調用該程序為(假設使用Shell腳本):
./rename.sh 5
最終文件名中的數字應填充為長度7,並確保最初沒有文件號為9999999。因此,生成的文件應為0000006 - x.jpg
, 0000007.jpg
, 0000008.jpg
。 確保最初所有文件都是增量文件; 也就是說,數字之間沒有差距。
在Bash中,我似乎根本不容易做到這一點,即使在Python中,這似乎也很繁瑣。 最好的方法是什么?
編輯:好的,到目前為止,這是我的努力。 我認為前導0是個問題,因此我使用重命名將其刪除:
rename 's/^0*//' *
現在只剩下數字了,理想情況下,我將使用一個類似這樣的循環,但是我對語法及其錯誤原因並不十分熟悉:
for file in "(*) - (*)" ; do mv "${file}" "$(($1+5)) - ${2}" ; 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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.