Dominar la manipulación de archivos es crucial para cualquier desarrollador, y Ruby ofrece soluciones elegantes para renombrar archivos de manera eficiente. Esta guía explora varias técnicas, desde renombrar archivos individuales hasta operaciones por lotes complejas en varios directorios.
Tabla de Contenido
- ¿Por qué renombrar archivos programáticamente?
- Renombrar un solo archivo
- Renombrar archivos en el mismo directorio
- Renombrar archivos recursivamente en subdirectorios
- Renombrar archivos por lotes con lógica personalizada
- Manejo robusto de errores
¿Por qué renombrar archivos programáticamente?
Renombrar archivos manualmente se vuelve impráctico cuando se trata de numerosos archivos. La automatización ofrece varias ventajas:
- Eficiencia: Procesa cientos o miles de archivos de forma rápida y precisa.
- Estandarización: Aplica convenciones de nomenclatura consistentes para una mejor organización.
- Control de versiones: Agrega marcas de tiempo o números de versión para realizar un seguimiento de las iteraciones de los archivos.
- Integración de flujo de trabajo: Integra sin problemas el cambio de nombre de archivos en canalizaciones de procesamiento de datos más grandes.
- Limpieza de datos: Corrige errores tipográficos, elimina caracteres no deseados y mejora la capacidad de búsqueda.
Renombrar un solo archivo
El escenario más simple implica renombrar un solo archivo. El método File.rename
de Ruby maneja esto directamente:
old_path = "/path/to/old_file.txt"
new_path = "/path/to/new_file.txt"
begin
File.rename(old_path, new_path)
puts "Archivo renombrado correctamente!"
rescue Errno::ENOENT
puts "Error: Archivo '#{old_path}' no encontrado."
rescue Errno::EEXIST
puts "Error: El archivo '#{new_path}' ya existe."
rescue => e
puts "Ocurrió un error: #{e.message}"
end
Renombrar archivos en el mismo directorio
Para renombrar varios archivos dentro del mismo directorio, use Dir.glob
para seleccionar archivos que coincidan con un patrón:
directory = "/path/to/files"
pattern = "*.txt"
Dir.glob("#{directory}/#{pattern}") do |file|
new_filename = file.gsub(/.txt$/, "_modified.txt") #Ejemplo de lógica de renombramiento
begin
File.rename(file, new_filename)
puts "Renombrado: #{file} -> #{new_filename}"
rescue => e
puts "Error al renombrar #{file}: #{e.message}"
end
end
Renombrar archivos recursivamente en subdirectorios
Para renombrar archivos en subdirectorios, use el comodín `**` con `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 "Renombrado: #{file} -> #{new_filename}"
rescue => e
puts "Error al renombrar #{file}: #{e.message}"
end
end
Renombrar archivos por lotes con lógica personalizada
Para escenarios más complejos, use un hash para asignar nombres de archivo antiguos a nombres de archivo nuevos:
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 "Renombrado: #{old_path} -> #{new_path}"
rescue => e
puts "Error al renombrar #{old_path}: #{e.message}"
end
end
Manejo robusto de errores
Siempre incluya un manejo de errores completo para gestionar con elegancia problemas como archivos no encontrados o archivos existentes.