Renombrar jpg en linux/windows

lborrero

Lanero Reconocido
16 Abr 2005
743
Hola,
una sugerencia respecto a la administración de archivos digitales.

La Sugerencia
La mayoría de personas cuando comienzan con fotografía digital acostumbran renombrar sus archivos con nombres que se entiendan. Entonces en las fotos de su adorable bebé img_2134.jpg pasa a ser natalia.jpg. El problema empieza cuando la imagen img_2178.jpg también es natalia.jpg.... entonces empiezan los números natalia1.jpg, natalia2.jpg.... hasta que llega a fotonatalia_11.jpg, nata23.jpg, nata_sonriendo_con_abuelita.jpg.... etc.
Ya la cogen, ¿verdad? El resultado es que mientras a corto plazo parece buena idea renombrar las fotos, a largo plazo no lo es, se vuelve dificilísimo encontrar la foto que uno quiere. También se vuelve imposible ordenarlas por fecha. También pasa que en dos directorios me quedan fotos diferentes con el mismo nombre y ya jamás las puedo unificar. Finalmente, es un trabajo brutal e inútil cuando llega uno con 200 fotos de las vacaciones y todas se llaman sanandres.jpg. A la larga, todas las personas que conozco han abandonado en algun momento la práctica de renombrar las fotos.

Sin embargo, renombrar los archivos me parece una excelente práctica, siempre que se haga metódica y automáticamente. Hay varias opciones, normalmente el software de la cámara tiene alguna utilidad para que al momento de importar las fotos se vaya renombrando. También existe software para eso, por ejemplo photo$hop tiene un renombrado en lote.
La opción que yo uso en windows es Irfanview, que es gratis. En el menú File->Batch Conversion/Rename se puede configurar con muchísimas opciones al gusto del consumidor.
La que yo uso es que renombre de img_5446.jpg a yymmdd 350D_5446.jpg, sacando la fecha automáticamente de la metadata EXIF de la foto. Así sé cuándo se tomó la foto, tengo una referencia al número original de la foto y sé con qué cámara lo tomé. No es que tenga muchas, pero eso me permite diferenciar las de la A70 de la 350D. Después, si quiero puedo agregar un nombre manualmente al final, entonces queda 060632 350D_5446 borrachos.jpg, conservando todas sus propiedades.

Ahí les queda pa' que lo apliquen.
 
La pregunta
Ahora una pregunta respecto al mismo tema: quiero conservar este esquema de nombres, pero en Linux.
Como Irfanview no funciona en Linux y quisiera minimizar el uso de Wine, he estado investigando sobre cómo hacerlo.
Mis primeras pesquisas me orientan hacia el uso de jhead
http://www.die.net/doc/linux/man/man1/jhead.1.html,
que es un programa por línea de comandos (no tengo inconveniente con eso) que lee y manipula los EXIF. Tiene una opción -n que renombra el archivo con la fecha. Eso ya es la mitad de lo que quiero, pero no me gustaría perder el código de la cámara, el número original de la foto y cualquier comentario que yo haya puesto después.

El llamado es entonces a los gurus de Linux para ver qué soluciones hay, se me ocurriría una especie de shell (en lo cual soy casi nulo) que use en parte jhead, pero no tengo claro cómo escribirlo. Si hay otras herramientas que lo hacen, bienvenidas.
 
No es una solución muy "ortodoxa", pero creo que cumple con lo que necesitas, le puedes poner los parámetros que quieras y organizar la salida como más te guste.

Así para un número indefinido de archivos, el unico problema es que la salida queda con el consecutivo que te tira el jhead.
./jhead -nf%d%m%Y *.jpg | sed /\.jpg/s///g | while read IN G OUT; do mv $OUT $IN-$OUT.jpg; done

Ya una solución un poquito más "estilizada", sería algo como:
Crear como ejecutable (cn.sh), debe estar en la misma ubicación del jhead... o modificar para que este en el PATH (borrar el ./)
Código:
for FILE in *.$EXT 
do
 ./jhead -nf%d%m%Y $FILE | sed /\.$EXT/s///g | while read IN G OUT 
 do
  mv $OUT $IN-$OUT.$EXT 
 done 
done
donde le pasas como parámetro la extensión de los archivos, ej. ./cn.sh jpg

PS... utilizo -nf porque el -n no me da salida.
 
  • Me gusta
Reacciones: 2 personas
ADIDAS, mil gracias por la ayuda, ya le puse el k+, no lo había probado antes porque no me había quedado tiempo, pero la solución estaba más cerca de lo que pensábamos, la opción para eso queda en el mismo jhead, el siguiente comando hace lo que yo quería (casi):

jhead -nf%y%m%d_350D_%f *.jpg

El "casi" es porque la imagen original tiene un prefijo "img_" que me gustaría quitar, aunque eso ya son chocheras de la vejez.
 

Los últimos temas