sábado, 11 de octubre de 2014

Cómo copiar a la vez varios archivos ubicados en distintas carpetas utilizando sus alias o sus symlinks.


Suelo tener mis documentos y demás archivos guardados y ordenados en sus correspondientes carpetas y subcarpetas. Pero necesito tener muchos de ellos “a mano”, reunidos en una carpeta visible en el Dock, en la barra lateral de las ventanas del Finder o bien en el Escritorio. Es decir, quiero tenerlos archivados en su carpeta, pero que al mismo tiempo sean accesibles. Para evitar duplicarlos y hacerme un lío con diferentes versiones hago lo mismo que vosotros: crear alias.

(Otro escenario sería el caso del usuario que gestiona sus fotos en carpetas del Finder, y que utiliza alias de las imágenes para crear selecciones a modo de álbumes.)

El asunto es, que a menudo necesito llevarlos conmigo en un pendrive y como es evidente, no puedo copiar los alias ya que necesito los originales. Si se trata solo de un par de archivos la solución es fácil: seleccionar los alias y teclear cmd+R (o hacer clic derecho e ir a Mostrar original). Se abrirán tantas ventanas del Finder como ubicaciones tengan los documentos originales y estos aparecerán realzados en azul en sus correspondientes ventanas de carpeta. Sólo quedará copiar uno a uno al pendrive. 

Vale, pero ¿y si son decenas de archivos repartidos en decenas de carpetas? Lo que tendríamos son decenas de ventanas abiertas. Necesitaba una solución que me permitiera seleccionar todos los ítems de la carpeta de alias y copiar los correspondientes originales de forma sencilla y rápida. Automator no tiene por defecto ninguna acción que sirva de ayuda, aunque si existen conjuntos de acciones “de pago” que incluyen algo como el “Get originales from alias” de Automated Workflows. El precio no es excesivo pero decidí buscar un Applescript que hiciera algo parecido.

Finalmente encontré en nnForums este script que propone Diggory Laycock:

[php]
set the backupSource to ":Users:diggory:aliases" as alias
set the backupDestination to ":users:diggory:Backup:" as alias

tell application "Finder"
set everyAlias to every item of folder backupSource

repeat with thisAlias in everyAlias
set originalFile to (original item of thisAlias)
duplicate originalFile to backupDestination
end repeat
end tell
[/php]


Confieso que soy un analfabeto en Applescript, pero he aprendido a "toquetear" los scripts con cortar, pegar y algo de imaginación. De hecho, hago como algunos ingenieros genéticos, que no saben cómo funciona el genoma de la mosca del vinagre, pero si que si quitan o modifican cierto gen les va a salir una mosquita con las alas rizadas o sin ellas.

Por un lado tenía claro es que no era práctico editar el script cambiando cada vez las carpetas de origen (backupSource) y de destino (backupDestination)  y que me iba a resultar más cómodo incorporar el script en Automator y que fuera éste el que le pasara los datos. Para mi, la solución era crear un workflow de Automator a modo de Servicio, que me me permitiera “hacer clic derecho” sobre la carpeta donde se encontraban los alias y apareciese un cuadro de diálogo que me solicitara una carpeta en la que hacer la copia de los originales.
Después de recordar cómo se hacía en Automator para pasar las variables al script, y modificar éste para ello, tras varios intentos obtuve este resultado:
(Haz clic sobre las imágenes para ampliarlas)


El script lo he adaptado de este modo:

on run {input, parameters}
set backupSource to first item of input
set backupDestination to second item of input
tell application "Finder"
set everyAlias to every item of folder backupSource
repeat with thisAlias in everyAlias
set originalFile to (original item of thisAlias)
duplicate originalFile to backupDestination
end repeat
end tell
end run


En mi caso funciona perfectamente, aunque le quedan detalles por pulir. Si la carpeta contiene un archivo que no sea un alias, o en la carpeta de destino ya existe alguno de los ítems a copiar se obtiene un mensaje de error. Cuando tenga algo de tiempo y lo resuelva os lo haré saber.
Para mi sorpresa funciona igualmente si modificamos el script para que haga lo mismo con symlinks o enlaces simbólicos, por lo cual utilizo dos versiones distintas del Servicio: uno para alias y otro para symlinks.

En este caso el script para symlinks sería este:

on run {input, parameters}
set backupSource to first item of input
set backupDestination to second item of input
tell application "Finder"
set everySymlink to every item of folder backupSource
repeat with thisSymlink in everySymlink
set originalFile to (original item of thisSymlink)
duplicate originalFile to backupDestination
end repeat
end tell
end run

NOTA:
Siempre que puedo advierto sobre el cuidado que debemos tener al usar symlinks. No voy a explicar aquí lo que es un enlace simbólico cuando otros lo hacen mejor aquí o aquí. Pero del mismo modo que un symlink es capaz de engañar a una aplicación mostrándose no como un alias sino como si fuera el archivo o carpeta real (lo cual es una gran ventaja para su uso, por ejemplo, con DropBox) en algunos casos es peligroso. He visto cómo alguna utilidad de backup y sincronización no se limitaba a borrar el symlink, sino que eliminaba el archivo original.



domingo, 5 de octubre de 2014

Usando SetExifData para editar los metadatos de mis fotos.


"Todo debate sobre tecnología DEGENERARÁ en una discusión entre usuarios de Windows y de Mac. Hoy día, es entre Android y iOS"

En mi anterior entrada os hablaba de ExifTool, una herramienta para la edición de los metadatos de las fotos y de cómo podíamos evitar usarlo mediante líneas de comandos del Terminal gracias a dos utilidades que le añadían una interfaz gráfica, es decir, ventanas y botones para que lo podamos usar los mortales comunes. Una de ellas es SetExifData, la he empezado a utilizar hace sólo un par de días y os voy a comentar qué pruebas he hecho en dos ordenadores diferentes: un viejo Mac Mini Intel 32 bits con Snow Leopard, y un MacBook Air con Mavericks.

IMPORTANTE:
ExifTool copia las imágenes originales y edita los metadatos de las copias, pero SetExifData borra los originales y mantiene en su lugar las copias, que son idénticas en todo, excepto en los metadatos.

Añadiendo metadatos.
Ya comenté que una de las ventajas de SetExifData es que permite que arrastremos las fotos seleccionadas sobre al icono de la aplicación del Dock, o a la ventana superior una vez abierto.


Al abrirse la aplicación se nos sugiere hacer una donación vía PayPal; si vamos a usar esta aplicación con regularidad no descartéis contribuir con un par de euros al desarrollo y actualizaciones futuras. Si lo dejáis para más adelante, solo hay que hacer clic en Close.

Ahora veremos la ventana de SetExifData con una serie de campos de metadatos que podemos rellenar; los más importantes para mi son Caption o Descripción del contenido de la foto, Keywords o palabras clave y Comments o comentarios. Si hacéis clic en el botón superior derecho de color azul Show Info se abrirá un cajón con la información que ya tiene la foto seleccionada en el listado superior.


Lo primero que hago es rellenar los campos Caption o Descripción del contenido de la foto, Keywords o palabras clave y Comments o comentarios. Spotlight o una carpeta inteligente son capaces de encontrar los términos de cualquiera de los tres campos, pero como veremos más tarde, si pedimos en Finder Obtener información sobre el archivo de la foto sólo aparecerá la de dos de los campos.

Si activamos la casilla Replace se reemplazarán los contenidos que ya hubiera por los que ahora introducimos.
Si activamos Append, se añadirá nuestro nuevo contenido al ya existente.
La casilla or remove all keywords es simplemente para borrar las palabras clave que ya existieran.

Ya solo queda hacer clic en el botón superior izquierdo con forma de martillo Process, para que se hagan efectivos los cambios.


Si desde el Finder hacemos Comando+I sobre las fotos (obtener información) aparecerá la ventana de información correspondiente a esa foto que nos mostrará los metadatos que hemos cambiado. Descripción corresponde a Caption, y palabras clave a keywords. Como veis, los Comentarios que aparecen en esta ventana no se corresponden con los Comments que habías editado antes. Sin embargo, Spotlight sí entenderá que los Comments equivalen a Comentarios cuando hace una búsqueda.


Si abrimos la foto con Vista Previa y hacemos Comando+I (Herramientas: mostrar inspector) se abrirá la ventana Inspector que muestra información de metadatos de la foto. Veremos que además de mostrar esa información, podemos añadir y borrar palabras clave. ¡Un momento! ¿podemos añadir palabras clave en Vista Previa? ¿Para qué estamos entonces peleándonos con SetExifData?

Pues si, la buena noticia es que Vista Previa permite añadir metadatos en las imágenes; la mala, es que sólo se pueden añadir a las fotos de una en una, lo cual es inviable si trabajamos con docenas o cientos de fotos a la vez (Si, ya he probado a seleccionar varias a la vez en el cajón de miniaturas... y no funciona.)

Buscando fotos por sus metadatos.
Si buscamos en Spotlight la palabra "Garona", que habíamos introducido tanto en Caption (descripción) como en Comments (Comentarios) veremos cómo encuentra sin problemas todas la fotos que contienen ese término en sus metadatos.


Al crear una carpeta inteligente, podemos elegir si ésta busca "Garona" en Caption (Descripción) o en Comments (Comentarios) y vemos que la encuentra en ambos casos.


Recordad que al seleccionar otro podemos añadir criterios de búsqueda a las carpetas inteligentes; en nuestro caso, todos aquellos que se correspondan con los metadatos de una foto que puedan ser de interés, o sea, además de palabras clave, descripción o comentarios, el modelo y marca de la cámara, si se ha usado flash, etc...

Geolocalización.
SetExifData también permite añadir manualmente la geolocalización de la foto si ésta se ha hecho con una cámara sin GPS. Para hacer ésto, cuando editamos los metadatos añadiendo palabras clave y descripción, podemos hacer clic en el botón Geotag. Aparecerá una ventana de Google Maps en la que podemos mover el icono de ubicación de la foto al punto geográfico que queramos.


Si luego abrimos la foto con Vista Previa y hacemos Comando+I para ver el inspector veremos que ahora aparece la pestaña GPS, en la cual vemos un mapa pequeñito con la ubicación que antes habíamos marcado.
Si el mapa os parece demasiado pequeño haced clic en el botón inferior Ubicar y la ubicación se abrirá en la aplicación Mapas a un tamaño mucho mayor.


Usando etiquetas del Finder
Si, ya se que las etiquetas del Finder no son metadatos que se guarden en la misma foto, y que hay incompatibilidades entre las nuevas etiquetas personalizables y las de versiones antiguas de Mac OS X. Solo las utilizo circunstancialmente para lo siguiente: si quiero copiar en un pendrive una selección de fotos para sacar copias en papel las selecciono en cada una de las carpetas y las etiqueto, por ejemplo, como Fotos a papel.
Como ya tengo creada una carpeta inteligente que muestra todas las fotos etiquetadas de esa forma, las puedo arrastrar desde allí al pendrive. Una vez copiadas las puedo seleccionar nuevamente y quitarles la etiqueta.


Alternativas a SetExifData en la App Store.
Por supuesto existen aplicaciones que hacen lo mismo que SetExifData, e incluso más y mejor. El precio no es un factor determinante, pero no son compatibles con Macs con un par de años o requieren una versión de Mac OS X que tal vez no podamos instalar en ese modelo.
  • Photo Meta Edit, 3,59€ pero sólo compatible con Mac OS X 10.8 o superior
  • Exif Editor, 8,99€ y en español, pero sólo compatible con Mac OS X 10.7 o superior
  • ExifChanger (usa ExifTool), 9,99€ compatible desde 10.6, pero sólo para Macs de 64 bits
  • Image Exif Editor, 8,99€, compatible desde 10.6, pero sólo para Macs de 64 bits