Dominar a manipulação de arquivos é crucial para qualquer desenvolvedor, e Ruby oferece soluções elegantes para renomear arquivos eficientemente. Este guia explora várias técnicas, desde renomeações de arquivos únicos até operações complexas em lote em vários diretórios.
Sumário
- Por que renomear arquivos programaticamente?
- Renomeando um único arquivo
- Renomeando arquivos no mesmo diretório
- Renomeando arquivos recursivamente em subdiretórios
- Renomeando arquivos em lote com lógica personalizada
- Tratamento de erros robusto
Por que renomear arquivos programaticamente?
A renomeação manual de arquivos torna-se impraticável ao lidar com inúmeros arquivos. A automação oferece várias vantagens:
- Eficiência: Processe centenas ou milhares de arquivos de forma rápida e precisa.
- Padronização: Imponha convenções de nomenclatura consistentes para melhor organização.
- Controle de versão: Anexe timestamps ou números de versão para rastrear iterações de arquivos.
- Integração de fluxo de trabalho: Integre perfeitamente a renomeação de arquivos em pipelines de processamento de dados maiores.
- Limpeza de dados: Corrija erros de digitação, remova caracteres indesejados e melhore a capacidade de pesquisa.
Renomeando um único arquivo
O cenário mais simples envolve renomear um único arquivo. O método File.rename
do Ruby trata disso diretamente:
old_path = "/path/to/old_file.txt"
new_path = "/path/to/new_file.txt"
begin
File.rename(old_path, new_path)
puts "Arquivo renomeado com sucesso!"
rescue Errno::ENOENT
puts "Erro: Arquivo '#{old_path}' não encontrado."
rescue Errno::EEXIST
puts "Erro: Arquivo '#{new_path}' já existe."
rescue => e
puts "Ocorreu um erro: #{e.message}"
end
Renomeando arquivos no mesmo diretório
Para renomear vários arquivos dentro do mesmo diretório, use Dir.glob
para selecionar arquivos correspondentes a um padrão:
directory = "/path/to/files"
pattern = "*.txt"
Dir.glob("#{directory}/#{pattern}") do |file|
new_filename = file.gsub(/.txt$/, "_modified.txt") #Exemplo de lógica de renomeação
begin
File.rename(file, new_filename)
puts "Renomeado: #{file} -> #{new_filename}"
rescue => e
puts "Erro renomeando #{file}: #{e.message}"
end
end
Renomeando arquivos recursivamente em subdiretórios
Para renomear arquivos em subdiretórios, use o curinga `**` com `Dir.glob`:
directory = "/path/to/files"
pattern = "*.txt"
Dir.glob("#{directory}/**/#{pattern}") do |file|
new_filename = file.gsub(/.txt$/, "_modified.txt")
begin
File.rename(file, new_filename)
puts "Renomeado: #{file} -> #{new_filename}"
rescue => e
puts "Erro renomeando #{file}: #{e.message}"
end
end
Renomeando arquivos em lote com lógica personalizada
Para cenários mais complexos, use um hash para mapear nomes de arquivos antigos para novos nomes de arquivos:
directory = "/path/to/files"
renames = {
"file1.txt" => "new_file1.txt",
"file2.jpg" => "new_file2.jpg"
}
renames.each do |old_name, new_name|
old_path = File.join(directory, old_name)
new_path = File.join(directory, new_name)
begin
File.rename(old_path, new_path)
puts "Renomeado: #{old_path} -> #{new_path}"
rescue => e
puts "Erro renomeando #{old_path}: #{e.message}"
end
end
Tratamento de erros robusto
Sempre inclua um tratamento de erros abrangente para gerenciar com elegância problemas como arquivos não encontrados ou arquivos existentes.