Böyle yapmayı dene
#!/usr/bin/python
import os
# Collect the names and type (file or directory)
filenames = os.listdir(".")
filetypes = map(lambda x: os.path.isdir(x), filenames)
files = zip(filenames, filetypes)
files = sorted(files, key=lambda x: (x[0].lower(), x[1]))
# Create a set of downcased filenames for quick lookup
files_lower = set()
for f in files:
files_lower.add(f[0].lower())
previous_name = ""
# Rename the files
for f in files:
if f[0].lower() == previous_name.lower() and f[1] is True:
# Find an unused index
c = 0
while True:
f_rename = f[0].lower() + "_" + str(c)
if f_rename.lower() in files_lower:
c += 1
else:
print("renaming %s to %s" % (f[0], f_rename))
os.rename(f[0], f_rename)
files_lower.add(f_rename.lower())
break
previous_name = f[0]
Bir dizinde aşağıdaki girişlerin olduğunu varsayalım
$ ls -F
a A/ b/ B/ B_0/ bb/ bB/ Bb/ BB/ c/ d/ D/
Başka bir deyişle, bunlar normal bir dosya olan "a" hariç tüm dizinlerdir. Bu betiği çalıştırmak aşağıdaki çıktıyı verecektir
renaming A to a_0
renaming b to b_1
renaming Bb to bb_0
renaming bB to bb_1
renaming bb to bb_2
renaming d to d_0
ve dizin şimdi aşağıdaki girişleri içeriyor:
$ ls -F
a a_0/ B/ B_0/ b_1/ BB/ bb_0/ bb_1/ bb_2/ c/ D/ d_0/
Komut dosyası yalnızca dizinleri yeniden adlandırır (yalnızca dizinleri yeniden adlandırdığınızdan bahsettiniz) ve yeniden adlandırdığı herhangi bir şeyin adını tüm küçük harflere dönüştürür (örneğinize göre). Ayrıca, bir dizini zaten var olan bir isimle yeniden adlandırmamaya da dikkat edin (bu nedenle, B_0 zaten var olduğundan, örneğimdeki b - & b; b_1).
Umarım bu sizin için çalışır.