簡體   English   中英

如何在文件名中以前導零遞增數字

[英]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.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}" "$(($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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM