lunes, 9 de junio de 2008

Renombrar archivos que contienen espacios y/o saltos de linea en sus nombres.

En ocasiones es necesario renombrar archivos que en su nombre contienen espacios en blanco y/o saltos de linea y puede darse el caso de que no se interpreten bien por algunos comandos en Linux debido a esta situación. Por ejemplo, si se quisieran renombrar todos los archivos dentro de un directorio que terminan con la extensión .MP3 a .mp3 sin alterar el nombre de las canciones (sin importar si son letras mayúsculas o minúsculas) podríamos usar algo como:

Código:

$ for arch in *.MP3; do name=`echo "$arch" | cut -d. -f1`; mv "$arch" "${name}.mp3"; done

De esta forma procesamos todos los archivos en el directorio actual que coincidan con la extensión .MP3, guardamos la parte del nombre del archivo sin extensión dentro de la variable name y hacemos el renombrado.

Nota: Lo importante a tomar en cuenta en este ejemplo es el uso de "double-quotes" para encerrar el nombre de las variables ("$arch" y "${name}.mp3") ya que con esto evitamos que la shell interprete los nombres de los archivos como varias entradas en el caso que contengan espacios en blanco o caracteres de new-line dentro del nombre y trata a cada entrada como una sola. Imagino que es posible utilizar alguna aproximación distinta como el uso de find -print0 y xargs -0 ó xargs -i '{}' pero bueno, es bien sabido que en Linux hay mas de una forma de pelar a un gato =).


...