convertir nombres de archivo de latin1 a utf8

Germán Poó Caamaño gpoo en ubiobio.cl
Mar Mar 20 23:48:22 CLT 2007


On Tue, 2007-03-20 at 19:04 -0400, Alvaro Herrera wrote:
> Hola,
> 
> Hace unos meses, finalmente me vencí a la presión y cambié mi sistema de
> Latin-1 a UTF8.  La verdad es que pese a que no estoy contento en mi
> fuero interno con el nuevo sistema, pero me he dado cuenta que muchas
> cosas están hechas y probadas solamente en UTF8 y muestran suficientes
> bugs en Latin1 que es desagradable tener que usar "el otro sistema".
> 
> Ahora el problema que tengo es que mi colección de música tiene muchos
> archivos que se llaman con letras no ASCII :-(  Y no he encontrado
> ninguna forma de cambiar los nombres a UTF8.  Todas las herramientas
> están enfocadas (iconv, recode) a cambiar el _contenido_ de los
> archivos, pero la verdad es que con eso no he tenido ningún problema.
> 
> Así que la pregunta es: ¿sabe alguno de ustedes una fórmula mágica para
> recodificar automáticamente el nombre de los archivos?  Un scriptcillo
> en shell serviría perfectamente.
> 
> De hecho ya lo he intentado sin éxito: por ejemplo, un truco feo como
> meter el nombre en un archivo y recodificar dicho archivo:
> 
> for file in *; do
> 	echo "$file" > nombre
> 	recode latin1..utf8 nombre
> 	nuevo_nombre=$(cat nombre)
> 	echo $nuevo_nombre
> done
> 
> No funciona :-(  En lugar de convertir los caracteres, los hace
> desaparecer.

En python podría ser algo como:

#!/usr/bin/env python

import string, sys, os, os.path

def utf8(str):
    return unicode(str, "iso-8859-1").encode("utf-8")

if __name__ == "__main__":
    for root, dirs, files in os.walk(sys.argv[1]):
        for name in files:
            old_name = os.path.join(root, name)
            new_name = os.path.join(root, utf8(name))
            os.rename(old_name, new_name)

Tiene un pequeño defecto. Asume que todo está en latin1.  Es decir,
renombra todo.  Pero se puede añadir algún test para determinar si la
cadena es o no latin1.

Pero puede servir para salir del paso.

-- 
Germán Poó Caamaño
Concepción - Chile



Más información sobre la lista de distribución Linux