jueves, marzo 06, 2008

Renombrado masivo de archivos

La necesidad: Cambiar la extensión de muchos archivos desde .XML a .xml (que increíblemente contrario a lo que muchos puedan pensar, son extensiones distintas).

El problema: Son MUCHOS archivos, y hacerlo a mano, uno por uno, es una labor tediosa y muy demandante de tiempo. No deseaba tampoco instalar aplicaciones externas para el renombrado masivo de archivos.

La solución: Nuevamente por línea de comando, dentro de la carpeta destino:
ls -1 *.XML | awk -F . '{ print $1 }' | xargs -i mv {}.XML {}.xml

Explicación del comando:
  • ls -1 *.XML : Me entrega un listado de todos los archivos de extensión .XML , un archivo por línea, sin detalles, solamente el nombre del archivo.
  • awk -F . '{ print $1 }' : Recupera el nombre del archivo sin extensión. -F . le indica al comando que el separador a usar es el caracter . (punto) y '{ print $1 }' imprime la primera parte de esta separación, ie: sólo el nombre.
  • xargs -i mv {}.XML {}.xml : Ejecuta el comando mv (mover) para hacer el renombrado de los archivos con su nueva extensión. -i es para indicar que la ejecución será "interactiva", recibiendo cada parámetro (en este caso el nombre del archivo sin extensión) como entrada, y {} es reemplazado en cada ejecución por el valor de entrada.
  • Los | (pipe) entre cada comando se encargan de encadenarlos transformando la salida de uno en la entrada del siguiente, como una tuberia (pipe en inglés, pronunciada paip).
Funciona :-)
Publicar un comentario