A questão é, na verdade, renomear todos os diretórios nomeados com um inteiro, por uma maiúscula com o índice correspondente (+1) do alfabeto e vice-versa:
1 -> A
enquanto, por exemplo,
C -> 3
Supondo que você não tenha mais de 26 pastas em um nível (número de letras no alfabeto), a questão não é essa complicada, mas precisamos levar em consideração algumas coisas:
- Precisamos renomear os diretórios de baixo para cima , já que a movimentação de diretórios dentro de diretórios renomeados entrará em colapso.
- Como você mencionou possíveis conflitos de nomes, precisamos renomear duas execuções :
- renomeia os diretórios, adicionando uma string única, sem sentido, para evitar confrontos de nomes
- remova a string depois que toda a renomeação ocorrer
Isso é exatamente o que o script abaixo faz:
O script
#!/usr/bin/env python3
import string
import shutil
import os
import sys
reorg = sys.argv[1]
chars = list(string.ascii_uppercase)
nums = [str(i+1) for i, c in enumerate(chars)]
tempstring = "_temp1234"
# first step: rename from bottom to top
for root, dirs, files in os.walk(reorg, topdown = False):
for dr in dirs:
tempname = None
if dr in chars:
tempname = str(chars.index(dr)+1)+tempstring
elif dr in nums:
tempname = chars[nums.index(dr)]+tempstring
if tempname:
print(dr, tempname)
shutil.move(root+"/"+dr, root+"/"+tempname)
# second step: remove the temporary string
for root, dirs, files in os.walk(reorg, topdown = False):
for dr in dirs:
if tempstring in dr:
shutil.move(root+"/"+dr, root+"/"+dr.replace(tempstring, ""))
Para usar
- Copie o script em um arquivo vazio, salve-o como
reorg.py
-
Execute-o com o diretório de destino como argumento:
python3 /path/to/reorg.py /path/to/second
Como sempre, tente primeiro uma amostra.