Renomeando arquivos em ruby
January 10th, 2012 4 comments
Primeiro post do ano ressuscitando a categoria dica rápida.
Há uma ou duas semanas o PotHix me passou umas músicas, mas na hora de copiar, todos os arquivos vieram sem extensão. Depois de perder um tempo tentando resolver com bash, eu desisti e resolvi o problema em 10 min usando ruby. Se alguém puder postar nos comentários a solução em bash eu agradeço!
Para a minha solução usei apenas os seguintes métodos:
#Retorna um array de strings com todos os arquivos do diretório.
Dir.entries("dir")
#Retorna se o arquivo é um diretório ou não.
File.directory?("arquivo")
#Renomeia o arquivo.
File.rename("nome_antigo", "nome_novo")
Minha solução final ficou assim:
def rename_in_dir(dir)
files = Dir.entries(dir)
files.each do |f|
# Usei esse if para ignorar os arquivos que já tinham
# extensão e as referências '.' e '..'
next if f == "." or f == ".." or f =~ /.*\..{2,4}$/
# é importante sempre usar o diretório junto, se não ele vai
# procurar sempre no diretório onde o script está sendo executado
if File.directory?("#{dir}/#{f}")
# Se for um diretório faz a chamada recursiva
puts "DIR: #{dir}/#{f}"
rename_in_dir("#{dir}/#{f}")
else
puts "renaming: #{dir}/#{f}"
# Adiciona a extensão .mp3 no arquivo
File.rename("#{dir}/#{f}", "#{dir}/#{f}.mp3")
end
end
end
# Começa a partir do diretório onde o arquivo está
rename_in_dir(".")