Tente fazer isso assim
#!/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]
Suponha que eu tenha as seguintes entradas em um diretório
$ ls -F
a A/ b/ B/ B_0/ bb/ bB/ Bb/ BB/ c/ d/ D/
Em outras palavras, todos eles são diretórios, exceto "a", que é um arquivo normal. A execução deste script fornecerá a seguinte saída
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
e o diretório agora contém as seguintes entradas
$ ls -F
a a_0/ B/ B_0/ b_1/ BB/ bb_0/ bb_1/ bb_2/ c/ D/ d_0/
O script apenas renomeia os diretórios (você mencionou que está apenas renomeando os diretórios) e converte os nomes de qualquer coisa que ele renomeia para todas as letras minúsculas (com base no seu exemplo). Também é cuidadoso em não renomear um diretório para um nome que já existe (daí o b - > b_1 no meu exemplo desde B_0 já existia).
Espero que isso funcione para você.