Um pequeno script python fará a renomeação recursivamente:
#!/usr/bin/env python3
import os
import shutil
import sys
directory = sys.argv[1]
for root, dirs, files in os.walk(directory):
for f in files:
new_f = root+"/"+f.replace(" ", "_").lower()
f = root+"/"+f
if f != new_f:
shutil.move(f, new_f)
onde:
-
lower()
diminuirá todos os capitais possíveis. -
replace(" ", "_")
substituirá espaços por sublinhados. -
if f != new_f
somente renomeará os arquivos se for realmente necessário. -
shutil.move(f, new_f)
irá realmente renomear o arquivo.
Como usar
- Copie o script em um arquivo vazio
- Salvar como
rename.py
-
Execute-o com o diretório de destino como argumento:
python3 /path/to/rename.py <directory>
Notas
- Use aspas se o diretório de destino incluir espaços.
- Lembre-se de que você se deparará com confrontos de nomes se o nome do arquivo renomeado já existir.
Em caso de possíveis confrontos de nomes
(Se você já começou a renomear manualmente, por exemplo) Use a versão abaixo.
#!/usr/bin/env python3
import os
import shutil
import sys
directory = sys.argv[1]
for root, dirs, files in os.walk(directory):
for f in files:
renamed = f.replace(" ", "_").lower() ;new_f = root+"/"+renamed
old_f = root+"/"+f
if old_f != new_f:
n = 1
while os.path.exists(new_f):
new_f = root+"/dupe_"+str(n)+"_"+renamed
n = n+1
shutil.move(old_f, new_f)
Irá renatar:
para:
EDITAR
O script acima renomeará arquivos . De um comentário, eu entendo que você gostaria de renomear as pastas da mesma forma. Com apenas algumas linhas, isso pode ser feito:
#!/usr/bin/env python3
import os
import shutil
import sys
directory = sys.argv[1]
def name_edit(item, root):
renamed = item.replace(" ", "_").lower() ;new_item = root+"/"+renamed
old_item = root+"/"+item
if old_item != new_item:
n = 1
while os.path.exists(new_item):
new_item = root+"/dupe_"+str(n)+"_"+renamed
n = n+1
shutil.move(old_item, new_item)
for root, dirs, files in os.walk(directory):
for item in files:
name_edit(item, root)
for item in dirs:
name_edit(item, root)
Explicação
No segundo script, a forma como os arquivos foram renomeados é convertida em uma função , para evitar que o mesmo código seja escrito duas vezes (em ambos os arquivos / pastas). Posteriormente, o script primeiro renomeia os arquivos , depois as pastas de forma recursiva:
#!/usr/bin/env python3
import os
import shutil
import sys
directory = sys.argv[1]
def name_edit(item, root):
# in one command, both replace spaces and lower {possible} capitals
renamed = item.replace(" ", "_").lower()
# combine directory and (new) file- or folder name
new_item = root+"/"+renamed
# combine directory and (old) file- or folder name
old_item = root+"/"+item
# if the name was changed, check for possible existing dupes
# and rename until the name is unique
if old_item != new_item:
n = 1
while os.path.exists(new_item):
new_item = root+"/dupe_"+str(n)+"_"+renamed
n = n+1
# if the file or folder name was changed, apply the change
shutil.move(old_item, new_item)
for root, dirs, files in os.walk(directory):
# use os.walk() to find files and folders recursively
for item in files:
name_edit(item, root)
for item in dirs:
name_edit(item, root)