Linuxでは、イメージ名を一括変更したいと思います。

Linuxでは、イメージ名を一括変更したいと思います。

名前付き画像が100万枚を超えています。

love-images-250x120.jpg
7788855441122-love-images-250x120.jpg
us-wallpapers33344.jpg
77441144desktop-wallpapers.jpg
desktop-wallpapers1144141411.jpg

次のように名前を変更したいと思います。

love-images.jpg
love-images-1.jpg
us-wallpapers.jpg
desktop-wallpapers.jpg
desktop-wallpapers-1.jpg

私はこのスクリプトを使用しています:

for f in [0-9]*; do mv "$f" "`echo $f | -f sed 's/^[0-9]*\W*//'`"; done 

ただし、2つの画像の名前が同じ場合、このコードは停止します。これを行う方法はありますか?

ベストアンサー1

これはPythonを使用して次のように行うことができます。

#!/usr/bin/python

import glob
import re
import os
from collections import Counter

origNames = glob.glob('*jpg')

finalNames = []
for i in origNames:
    for old, new in [(r'\d+x\d+', ''), (r'\d', ''),(r'^\W+', ''),(r'-*\.-*', '.'), (r'\.jpg$', '')]:
        i = re.sub(old, new, i)
    finalNames.append(i)

counts = Counter(finalNames)
for s,num in counts.items():
    if num > 1:
        for suffix in range(1, num + 1):
            finalNames[finalNames.index(s)] = s + str(suffix)

print(origNames, finalNames)

for i,j in zip(origNames, finalNames):
    os.rename(i,j+".jpg")

おすすめ記事