Apple Weblog Perú

Blog sobre el MundoMac º Carlos Hidalgo Tolentino

Truco: Renombrar archivos en masa, con Automator y Terminal

Posted by Carlos Hidalgo Tolentino en noviembre 9, 2008

En muchas ocasiones es necesario renombrar un gran número de archivos. Las tareas de renombrado pueden incluir la eliminación o cambio de partes del nombre, o el añadido de un número de serie, o una fecha, o algún otro identificador único a un conjunto de archivos.

En Mac OS X disponemos de una herramienta única, Automator, que es bastante cómoda de usar, especialmente porque podemos generar un plugin para el Finder que nos permita renombrar archivos seleccionados simplemente desde un menú de contexto en la ventana del Finder.

La otra opción de que disponemos en Mac OS X (y también en cualquier sistema Linux) es usar el terminal. Gracias a la flexibilidad del sistema Unix para localizar archivos mediante expresiones regulares, no es posible renombrar archivos como en MS-DOS/línea de comandos de Windows NT y superiores con el comando ren (por ejemplo, en Windows/MS-DOS es posible teclear ren *text *.txt, ya que se entiende que el primer y segundo comodín (*) están sincronizados; en Unix *text y *.txt pasarían al comando TODOS los archivos acabados en text y TODOS los archivos acabados en *.txt)

Automator

Para realizar un renombrado masivo de archivos desde Automator basta con seleccionarlos en el Finder, hacer Control-clic (o clic derecho) sobre la selección, y escoger el menú Más > Automator > Crear flujo de trabajo… Una vez echo eso, aparecerá un flujo de trabajo con una primera acción, Obtener los ítems del Finder especificados, que pasará los nombres de archivo a la acción siguiente.

La siguiente acción realizará el renombrado: Renombrar ítems del Finder. Al añadir esa acción tras Obtener los ítems…, se nos preguntará si queremos modificar directamente los nombres de los archivos, o añadir una acción de copia de archivos cuyos nombres serán los que modifiquemos. Lo normal para un renombrado es pulsar sobre No añadir, pero recordemos que los nombres cambiarán sin vuelta atrás.

En cualquier caso, ahora tenemos que configurar la acción Renombrar ítems del Finder, eligiendo una de las siguientes opciones:

  • Añadir fecha y hora: una opción interesante para que el nombre de archivo refleje bien la fecha de creación, modificación o última apertura, bien la fecha de procesamiento por nuesto flujo de Automator. Hay diferentes opciones para personalizar el formato de fecha, y si aparece antes o después del nombre actual, y con qué separador.
  • Añadir texto: permite añadir prefijos o sufijos, o extensiones, a los archivos.
  • Cambiar mayúsculas/minúsculas: permite cambiar los nombres para que todas las letras estén en MAYÚSCULA o en minúscula, o para que Sólo Las Primeras Letras De Cada Palabra vayan en mayúscula. Y se puede aplicar a todo el nombre del archivo (incluyendo extensión), sólo al nombre sin tocar la extensión, o sólo a la extensión.
  • Convertir en secuencial: añade un número de serie, de tantos dígitos como queramos, al principio o al final del nombre de cada archivo, o de un nombre fijo que podemos elegir, así como el separador entre nombre de archivo y número de serie.
  • Reemplazar texto: permite que eliminemos o cambiemos parte de un nombre, pero sin utilizar expresiones regulares.
  • Nombrar ítem individual: es la última opción, y sólo tiene interés cuando se quiere cambiar el nombre de un único archivo, o darle el mismo nombre con diferentes extensiones a archivos con esas diferentes extensiones.

Si quisiéramos hacer varias sustituciones, o quisiéramos realizar varias de estas operaciones a la vez sobre el conjunto de archivos, tendríamos que seguir añadiendo acciones del tipo Renombrar ítems del Finder.

Renombrar elementos directamente en el Finder

Ya mencioné de pasada la acción Renombrar ítems del Finder y su uso para renombrar, ocasionalmente, archivos seleccionados.

Lo que vamos a hacer ahora es crear un elemento permanente, que llamaremos Renombrar elementos, y que estará disponible en el Finder en el menú de contexto, como una opción más de Más > Automator.

Para ello, hemos de seguir los siguientes pasos:

  1. Crear un nuevo flujo de trabajo vacío en Automator. Puesto que queremos guardarlo como un módulo del Finder, se supone que existe una acción, aunque no la veamos, del tipo strong>Obtener los ítems del Finder especificados.
  2. Añadir una acción Ordenar ítems del Finder, puesto que el orden es muy importante si la opción de renombrado que queremos incluye añadir números de serie o similares. Pulsaremos sobre el botón Opciones de esta acción, y dejaremos marcada la casilla Mostrar esta acción al ejecutar el flujo, lo que nos permite cambiar las opciones de ordenación.
  3. Añadir a continuación una acción Renombrar ítems del Finder, dejando también marcada la opción Mostrar esta acción al ejecutar el flujo, de modo que no sólo podamos renombrar, sino crear secuencias, o pasar de mayúsculas a minúsculas nombres y/o extensiones.
  4. Por último, guardar el flujo de trabajo como módulo del Finder, con el nombre Renombrar elementos, por ejemplo.

A partir de este momento tendremos capacidades de renombrado bastante potentes dentro del Finder, usando el menú contextual Más > Automator > Renombrar elementos.

Terminal

En una sesión de terminal (supondremos que nuestra shell es Bash), veremos cómo realizar cada uno de los tipos de renombrado que podemos hacer con Automator.

El esquema que vamos a usar va a ser prácticamente siempre del tipo:

for i in *.ext;
do
newname=[expresión para calcular newname];
mv $i $newname;
done

Que calcula una variable newname para el nuevo nombre de cada archivo $i, y luego realiza el cambio. Así que lo que cambiará en cada uno de los casos siguientes, fundamentalmente, será la expresión para obtener newname.

Añadir fecha y hora

Esta es de las fáciles. Puesto que `comando` devuelve una cadena con el resultado de ejecutar comando, date es el comando que proporciona la fecha actual, y $nombre proporciona el valor de la variable nombre, podemos incluir una variable separator, y cambiar newname=[expresión para calcular newname]; por:

separator='_';
newname=$i$separator`date`;

para añadir la fecha tras el nombre del archivo $i, separada por un guión bajo (_). Podemos jugar con las opciones de date para que la fecha tenga el formato que deseemos. Y cambiar el orden de `date`, $separator y $i para conseguir diferentes efectos.

Añadir texto

Añadir texto es, en general, más fácil que en el caso anterior, aunque veremos que en un caso es complejo.

Antes del nombre

newname=nuevotextoincluyendoseparador$i

Añadir extensión

newname=$i.nuevaextensión

Después del nombre, manteniendo la extensión

Éste es el caso complicado. Para calcular newname hay que hacer lo siguiente

extension=`echo $i | awk -F . '{print $NF}'`
filename =`basename $i .$extension`
newname = $filename'_textoañadido.'$extension

Cambiar mayúsculas/minúsculas

Para esto utilizaremos el comando tr, que permite pasar de mayúsculas a minúsculas y viceversa, o bien un programa awk más complejo en caso de necesidad.

Para todo mayúsculas:

newname = `echo $i | tr '[:lower:]’ ‘[:upper:]‘`

Para todo minúsculas:

newname = `echo $i | tr '[:upper:]’ ‘[:lower:]‘`

Para Mayúsculas De Palabras:

newname = `echo $i | awk 'BEGIN { RS=' '; FS=''; ORS=' '; OFS=''; } { $1=toupper($1); print $0 }'`

Si queremos que la extensión no cambie, tenemos que hacer algo como esto:

extension=`echo $i | awk -F . '{print $NF}'`
filename =`basename $i .$extension`
newname = `echo $filename | awk 'BEGIN { RS=' '; FS=''; ORS=' '; OFS=''; } { $1=toupper($1); print $0 }'`'.'$extension

O lo que es lo mismo, aplicamos las técnicas anteriores a filename, y después lo concatenamos con '.'$extension.

Convertir en secuencial

Este caso se sale un poco de la normalidad, porque necesitaremos crear un contador:

let start=0; # O 1, o 100...
let counter=$start;
separator='_'
for i in *;
do
newname=$i$separator$counter;
mv $i $newname;
let counter=$counter+1;
done

Igualmente, podemos cambiar el contenido y el orden de $separator, $counter y $i.

Reemplazar texto

Esta es fácil si usamos, por ejemplo, el comando sed para hacer las substituciones:

newname = `echo $i | sed 's/original/sustitución/'`

(Via Memoria de Acceso Aleatorio.)

Anuncios

Una respuesta to “Truco: Renombrar archivos en masa, con Automator y Terminal”

  1. Este contenido no ha llegado vía Memoria de Acceso Aleatorio, es contenido de Juan de Dios Santander Vela para Memoria de Acceso Aleatorio con licencia Creative Commons-Attribution, y debería enlazar no a Memoria de Acceso Aleatorio en genérico, sino al post completo.

    Por ejemplo, la última entrada debería poner:

    Un artículo de Juan de Dios Santander Vela en Memoria de Acceso Aleatorio

    ¡Un saludo!

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s