Para usar o script abaixo, você não precisa mais do que a capacidade de colar:)
Como usar
- Cole o script abaixo em um arquivo vazio, salve-o como (por exemplo)
rename_title.py
- torne-o executável (por conveniência)
chmod u+x rename_title.py
-
Execute-o com o diretório para renomear como argumento:
/path/to/rename_title.py <directory/to/rename>
O script
#!/usr/bin/env python3
import os
import sys
import shutil
directory = sys.argv[1]
skip = ["a", "an", "the", "and", "but", "or", "nor", "at", "by", "for", "from", "in", "into", "of", "off", "on", "onto", "out", "over", "to", "up", "with", "as"]
replace = [["(", "["], [")", "]"], ["{", "["], ["}", "]"]]
def exclude_words(name):
for item in skip:
name = name.replace(" "+item.title()+" ", " "+item.lower()+" ")
# on request of OP, added a replace option for parethesis etc.
for item in replace:
name = name.replace(item[0], item[1])
return name
for root, dirs, files in os.walk(directory):
for f in files:
split = f.find(".")
if split not in (0, -1):
name = ("").join((f[:split].lower().title(), f[split:].lower()))
else:
name = f.lower().title()
name = exclude_words(name)
shutil.move(root+"/"+f, root+"/"+name)
for root, dirs, files in os.walk(directory):
for dr in dirs:
name = dr.lower().title()
name = exclude_words(name)
shutil.move(root+"/"+dr, root+"/"+name)
Exemplos:
a file > A File
a fiLE.tXT > A File.txt
A folder > A Folder
a folder > A Folder
E mais complexo, excluindo ["a", "an", "the", "and", "but", "or", "nor", "at", "by", "for", "from", "in", "into", "of", "off", "on", "onto", "out", "over", "to", "up", "with", "as"]
:
down BY the rIVER for my uncLE To get water.TXT
torna-se:
Down By the River for My Uncle to Get Water.txt
etc, ele simplesmente torna todos os arquivos e pastas (recursivamente) Title Case, extensões em minúsculas.
EDIT: Eu adicionei todos os artigos, conjunções e preposições que não precisam ser capitalizados de acordo com as regras de capitalização para títulos de músicas.