O comando
rename é usado para renomear múltiplos arquivos de acordo com as regras que você criar. É desejável conhecer o básico de expressões regulares para dominar o comando.
Vou pegar como exemplo um diretório contendo arquivos *zip com nomes bem cabulosos:
cd meu-diretorio
$ ls *zip
Double Dragon (1989) (Activision) (PAL) [!].zip
Kung Fu Master (1984) (Activision).zip
Mario Bros. (1983) (Atari).zip
Nightmare (1983) (Sancho).zip
Volleyball (1983) (Starsoft) (PAL) [!].zip
Quero traduzir todas as letras maiúsculas em minúsculas:
rename 'y/A-Z/a-z/' *zip
ls *zip
double dragon (1989) (activision) (pal) [!].zip
kung fu master (1984) (activision).zip
mario bros. (1983) (atari).zip
nightmare (1983) (sancho).zip
volleyball (1983) (starsoft) (pal) [!].zip
Agora quero substituir todos os espaços em branco por "_":
rename 's/ /_/g' *zip
$ ls *zip
double_dragon_(1989)_(activision)_(pal)_[!].zip
kung_fu_master_(1984)_(activision).zip
mario_bros._(1983)_(atari).zip
nightmare_(1983)_(sancho).zip
volleyball_(1983)_(starsoft)_(pal)_[!].zip
E finalmente remover todos os caracteres especiais, mantendo somente as letras, dígitos, "_" e ponto:
rename 's/[^a-z0-9\.\_]//g' *zip
$ ls *zip
double_dragon_1989_activision_pal_.zip
kung_fu_master_1984_activision.zip
mario_bros._1983_atari.zip
nightmare_1983_sancho.zip
volleyball_1983_starsoft_pal_.zip
É possível combinar todas as regras que você deseja em um único comando, separando as regras por ";":
rename 'y/A-Z/a-z/ ; s/ /_/g ; s/[^a-z0-9\.\_]//g' *zip
Bônus
É possível criar um alias para corrigir nomes de arquivos. Adicione a seguinte linhas ao arquivo
~/.bashrc:
alias renomear="rename 'y/A-Z/a-z/ ; s/ /_/g ; s/[^a-z0-9\.\_]//g'"
Recarregue as configurações do bashrc (source ~/.bashrc) ou reinicie a sessão de usuário, em seguida você pode consertar o nome de seus arquivos digitando:
renomear Arquivo\ maLuCo.Qualqu3r
Até a próxima!