Páginas

miércoles, 2 de enero de 2013

Cómo renombrar archivos con caracteres raros en el nombre

Cuando el gestor de descargas JDownloader descomprime archivos RAR, algunas veces genera archivos con caracteres extraños en el nombre. En lugar de vocales acentuadas, la letra ñ u otros caracteres extendidos, en el nombre del archivo aparecen símbolos como este .

Los archivos con tales caracteres en el nombre no se pueden reproducir, si son archivos multimedia, ni se pueden ejecutar si son archvos de programa. Tampoco se pueden copiar, renombrar o borrar directamente. Son, por tanto, inaccesibles.

Propiedades de un archivo de sonido con un carácter extraño en el nombre.
Informe de error al intentar cambiar el nombre al archivo anterior.
Si los archivos descargados se descomprimen con la utilidad unrar nativa de Linux esto no ocurre. El archivador de KDE Ark utiliza internamente el comando unrar.

Para corregir este problema hay dos posibles soluciones. De hecho, hay más, pero sólo explicaré las dos más fáciles y útiles.

1. Para renombrar archivos sueltos o una carpeta: utilizar el comando mv y los caracteres comodín.

Abrir un terminal y utilizar el comado mv para renombrar el archivo o la carpeta. Utilizar los caracteres comodín para identificar el archivo o la carpeta con el nombre inaccesible. El caracter * substituye un número indeterminado de caracteres. El caracter ? substituye un único carácter.

Para el ejemplo anterior, el comando podría ser éste:

mv Villa-Lobos-* Villa.Lobos-Bachiana.Brasilera.n5.mp3

El resultado se puede apreciar en esta captura:


2. Para renombrar múltiples archivos o carpetas: utilizar el comando convmv.

El comando convmv sirve para cambiar la codificación de caracteres de los nombres de archivo. No viene instalado por defecto en openSUSE. Para instalarlo, ejecutar en el terminal el comando siguiente:

sudo zypper install convmv

Después, nos situamos en la carpeta dónde están los archivos o carpetas que se quieren corregir y se ejecuta este comando:

convmv -r -f cp1252 -t utf-8 * --notest

Significado de los parámetros del comando:
  • -r  -  especifica que el comando corregirá los nombres de archivo de modo recursivo, es decir, los nombres de archivo de los archivos de la carpeta actual y los de todas las carpetas que están incluidas en ésta.
  • -f  -  especifica la codificación de caracteres que tienen los archivos que se quieren convertir.
  • cp1252  -  codificación de caracteres por defecto de Windows, pues seguramente el archivo comprimido se creó en Windows.
  • -t  -  especifica la codificación de caracteres a la que se quiere convertir los nombres de archivo.
  • utf-8  -  codificación de caracteres por defecto en Linux.
  • --notest  -  especifica que no es una prueba. Si no se incluye, el comando sólo muestra cómo quedarían los nombres de archivo, pero no realiza ningún cambo.
  • -  indica que el cambio afectará a todos los archivos.
Conviene ejecutar primero el comando sin el parámetro --notest. Si el resultado no es el esperado, se puede probar con otra codificación de caracteres. Para ver la lista de codificaciones disponibles, ejecutar convmv --list. Si alguno de los parámetros indicados no es útil, no hay que incluirlo.  Para ver la lista completa de opciones del comando, ejecutar convmv --help y para ver su página de manual, ejecutar man convmv. Para  salir del comando man,  pulsar q.

Fuente:

8 comentarios:

  1. Hasta ahora siempre he utilizado mv, desconocía la aplicación convmv. Buen aporte compañero !

    ResponderEliminar
  2. Magnífica entrada, a veces me he vuelto loco tratando de solucionar este problema.

    ResponderEliminar
  3. Gracias por tu valoración. Un saludo.

    ResponderEliminar
  4. Dos herramientas más para hacerlo de manera gráfica, PcMan File Manager y Midnight Commander.

    ResponderEliminar
    Respuestas
    1. Gracias por la información. Un saludo.

      Eliminar
  5. Yo tengo un conjunto de fichero que inicialmente estaban en google drive, sincronizados en un Mac OSX y todo funciona sin problema, hasta que decidí prescindir de google drive y mover los ficheros con un rsync a linux .. desde ahí compartirlo por samba a el equipo Mac y es aquí donde empezo los problemas.

    Todos los ficheros que tienen acentos desde el Mac no se abren dan error, asi que decidí renombrarlos para quitaro, pero si lo hago con:

    rename á a *
    Unrecognized character \xC3; marked by <-- HERE after <-- HERE near column 1 at (eval 1) line 1.

    convmv -r -f cp1252 -t utf-8 *
    Skipping, already UTF-8: ./pepé.txt
    No changes to your files done. Use --notest to finally rename the files.

    Si busco con un find no me devuelve nada
    root@srv:/root# find . -name 'é'

    Si lo paso por un sed no me encuentra nunca la vocal acentuada
    find . -regex '.*[^a-zA-Z./].*' |sed 's/é/e/'

    Lo curioso es que si creo un fichero nuevo con acento tanto desde el servidor linux, como desde el cliente mac todo funciona correctamente.

    La variable LANG está fijada es_ES.UTF-8

    Da la sensación que esos nombre de fichero NO estan UTF-8 si no en otra historia... ¿pero el cual?

    La verdad que estoy dandole vueltas sin encontrar solucion.

    ResponderEliminar
    Respuestas
    1. Hola, compañero, perdona que haya tardado tanto en contestarte. De todas formas no puedo ayudarte pues no utilizo samba desde hace mucho tiempo, ahora en casa todos los equipos los tengo con Linux. Un saludo.

      Eliminar