[Comunidad FotoLibre]
Ayuda => Pide ayuda aquí => Mensaje iniciado por: redy en 31 mar 2010, 17:06 pm
-
Como ya se comentó hace tiempo, creo que fué Medyr. El exiftool permite ordenar las fotos basándonos en la información exif. Y ya habíamos preparado un .desktop para geeqie, a petición de tomás senabre para hacerlo automáticamente. El problema es que como geeqie agrupa raw+jpeg había que pasarlo dos veces.
Pero esto se puede arreglar con un sencillo script: Yo le he llamado clasifica y lo puse en ~/bin para que esté accesible en le path del usuario. También hay que darle permiso de ejecución.
#! /bin/bash
#
# Las siguientes dos variables pueden ser ajustadas segun tus preferencias
#
# DIR es el directorio padera a dónde se van a mover las fotos se crearán
# subcarpetas para el año, mes y día_Motivo. Si quieres otra estructura
# distinta deberás modificar el comando exiftool.
#
# EXT son las extensiones que se verán afectadas, normalmente jpg y el raw
# de tu cámara. Ponlo en mayúsculas y en minúsculas por si acaso.
#
DIR="/media/fotos/clasificadas"
EXT="JPG jpg JPEG jpeg NEF nef ORF orf RAW raw CRW crw CR2 cr2 DNG dng"
#
VAR=$(zenity --entry --text="Motivo fotográfico")
while (( $# >= 1 )); do
NOMBRE="${1%.*}"
for j in $EXT; do
if [[ -f "${NOMBRE}.$j" ]]; then
exiftool '-Directory<DateTimeOriginal' \
-d "$DIR/%Y/%m/%d${VAR:+_$VAR}" \
"${NOMBRE}.$j"
fi
done
shift
done
Ahora solo queda poner el .desktop para geeqie.
[Desktop Entry]
Version=1.0
Type=Application
Name=Sort By Date
Comment=Sort files by date using Exiftool
#Name[cs]=
#Name[fr]=
Name[es]=Clasificar por fechas
# %f A single file name, even if multiple files are selected. The
# system reading the desktop entry should recognize that the program in
# question cannot handle multiple file arguments, and it should should
# probably spawn and execute multiple copies of a program for each
# selected file if the program is not able to handle additional file
# arguments. If files are not on the local file system (i.e. are on HTTP
# or FTP locations), the files will be copied to the local file system and
# %f will be expanded to point at the temporary file. Used for programs
# that do not understand the URL syntax.
#
# %F A list of files. Use for apps that can open several local files
# at once. Each file is passed as a separate argument to the executable
# program.
#
# %u A single URL. Local files may either be passed as file: URLs or
# as file path.
#
# %U A list of URLs. Each URL is passed as a separate argument to
# the executable program. Local files may either be passed as file: URLs
# or as file path.
#
# "$GEEQIE_DESTINATION" destination set by Geeqie
Exec=clasifica %F
# Desktop files that are usable only in Geeqie should be marked like this:
Categories=X-Geeqie;
OnlyShowIn=X-Geeqie;
# Show in menu "File"
X-Geeqie-Menu-Path=FileMenu/FileOpsSection
# This is a filter - $GEEQIE_DESTINATION is required
X-Geeqie-Filter=false
# It can be made verbose
# X-Geeqie-Verbose=true
-
Pues muchas gracias señor Redy, estoy probándolo pero ya.
Te digo algo en unos minutos....
-
Funciona de narices, me lo he dejado descargando fotos y he venido a responderte. :-)
Yo además he añadido los RAW de Panasonic el RW2 rw2
Muchas gracias Redy, eres un crack :chin:
-
y un pequeño manual de todo el proceso :ejem:
-
Buenas,
Menuda enciclopedia estás hecho redy, ¡eres un genio!, gracias por el script q:)
Ta lu3go
-
Hola chic@s,
Me he perdido un poco... :-o
Yo partía de los scripts de este hilo (http://comunidad.fotolibre.net/index.php/topic,4869.msg48649.html#msg48649) y que el inconveniente como se comenta era que debías hacer dos pasadas o mover a pinrel los raw a la carpeta creada con el script en geeqie.
Pero ahora no acabo de pillarlo, así que hasta que no lo comprenda no mueva ni un pelo :-?
Si sustituyo este que comentas por el del hilo de referencia consigo lo mismo pero sin necesidad de hacer dos pasadas? Ya se que la cosa es probarlo, pero ultimamente "mis pruebas suelen ser muy peligrosas y ando escamado...
Saludos
Jose
-
Gracias, redy, me lo apunto para la próxima revisión de mi flujo. :-?
-
Si sustituyo este que comentas por el del hilo de referencia consigo lo mismo pero sin necesidad de hacer dos pasadas?
Exacto.
y un pequeño manual de todo el proceso :ejem:
¿Como se instala?
Pues partimos de que tienes instalado:
- geeqie 1.0 (o alguna 0.99 Beta).
- exiftool
- zenity
Copias y pegas el primer trozo de código (el script en bash) en un editor de textos. Editas las lineas que empiezan por DIR= y por EXT= para adaptarlas al sitio dónde quieres guardar tus fotos, y asegurarte de que la extensión de tus raws está en la lista. Lo guardas con el nombre 'clasifica' en una carpeta que esté en el path (Yo la guardo en la carpeta bin dentro de la carpeta home de mi usuario).
Le cambias los permisos para que sea ejecutable.
Copias y pegas el segundo trozo de código en un editor de texto y lo guardas en la carpeta .config/geeqie/applications, que tendrás dentro tu carpeta home de usuario, con el nombre de clasificar_fotos.desktop
(Alternativamente a usar un editor de texto, este último paso puedes hacerlo con el propio geeqie: Te vas a editar, preferencias, configurar editores, nuevo. Borras todo y pegas el segundo trozo de código. Abajo en dónde pone new.desktop le cambias el nombre por clasificar_fotos.desktop, y le das a guardar)
Puedes asignarle una tecla rápida en editar, preferencias, preferencias, teclado.
¿Como se usa?
Partimos de que tienes la cámara enchufada y montada en una carpeta, o una tarjeta insertada en el lector, o una carpeta donde están las fotos sacadas en una o varias sesiones, todas en el mismo saco.
Navegas con el geeqie hasta esa carpeta o dispositivo. Seleccionas en la lista de archivos un grupo de fotos que correspondan al mismo 'evento' y le das a editar, editores externos, clasificar por fechas (o pulsas la tecla que le has asignado).
Se te abrirá una ventana de diálogo que te pide un nombre. Le ponemos por ejemplo 'Cumpleaños de pepito' suponiendo que todas las fotos son de la fecha por ejemplo 04/05/2010, dentro de la carpeta que configuraste en el primer script se creará, si no existía ya, una carpeta 2010, dentro de esta una carpeta 05, y dentro de ella una carpeta 04_Cumpleaños de pepito, y allí se moverán todas las fotos seleccionadas. Si el mismo día hicimos más fotos pero de otro evento, las seleccionamos y le ponemos otro nombre e irán a parar a otra carpeta que también empezará por 04_ pero tendrá otro nombre a continuación.
Ahora seleccionamos todas las fotos que corresponden a otro evento, por ejemplo 'Viaje a Roma' pero en este caso no son de un único día, sino que el viaje abarca desde el 1 al 5 de Agosto de 2010. Te pedirá el nombre, le pones 'Viaje a Roma' y se creará la carpeta 08 dentro de 2010 (si no existía ya) y dentro de ella se crearán las carpetas '01_Viaje a Roma', '02_Viaje a Roma' ... '05_Viaje a Roma' y las fotos seleccionadas se copiarán a esas carpetas, cada una al día correspondiente.
Si dejas en blanco el nombre del evento cuando se te pregunta se creará la carpeta del día sin más.
**Modificación para añadir esto**
Por cierto los que quieran modificar la estructura del arbol, tal como comentabamos en este hilo (http://comunidad.fotolibre.net/index.php/topic,4869.msg48838.html#msg48838). Tienen que cambiar la línea del script en bash que dice
exiftool '-Directory<DateTimeOriginal' \
-d "$DIR/%Y/%m/%d${VAR:+_$VAR}" \
"${NOMBRE}.$j"
Ojo que aquí los % son simples y no dobles como en el fichero .desktop.
Por ejemplo si quieres poner todas las carpetas al mismo nivel con el nombre de AÑO_MES_DIA puedes poner
-d "$DIR/%Y_%m_%d${VAR:+_$VAR}" \
Si quisieras crear una carpeta año, una carpeta mes_evento y el día anteponerselo a las fotos en el nombre podrías usar:
exiftool '-filename<DateTimeOriginal' \
-d "$DIR/%Y/%m{VAR:+_$VAR}/%d_${NOMBRE}.$j" \
"${NOMBRE}.$j"
El esquema lo decides tu.
(Modificado para incluír zenity como dependencia)
-
Su peso en oro, si señor. Gracias maestro, me la apunto para cuando tenga un rato.
-
Gracias una vez mas redy...
funcionando :-)
Saludos
Jose
-
Hola,
Estoy intentando probar el script pero tengo la duda de si tengo instalado exiftool o no.
En el gestor de paquetes Synaptic me sale que tengo instalado libimage-exiftool-perl y en la descripción del paquete dice Library and program to read and write meta information in multimedia files. Según esta descripción entiendo que el programa está incluído en el paquete.
¿Hay otra manera de comprobarlo?
Un saludo,
Andoni
-
Estoy intentando probar el script pero tengo la duda de si tengo instalado exiftool o no.
Pues da la impresión de que si, pero para asegurarte puedes teclear en una consola:
exiftool -ver
Si te devuelve ExifTool seguido de un número de versión es que lo tienes, si te dice que 'command not found' o algo parecido es que no.
¡Ah! se me olvidó poner que también es necesario tener instalado 'zenity'. Ahora mismo lo modifico.
-
Otro par de preguntas:
Lo guardas con el nombre 'clasifica' en una carpeta que esté en el path (Yo la guardo en la carpeta bin dentro de la carpeta home de mi usuario).
¿Cuál es el path? ¿Cual es la carpeta bin? Yo en mi carpeta no encuentro ninguna con ese nombre.
Le cambias los permisos para que sea ejecutable.
¿Cómo se cambian los permisos?
Siento ser un poco preguntón y mis disculpas si pregunto algo muy evidente y de "párvulos". :sonroja2:
Gracias y un saludo,
Andoni
-
Perdona Redy, nos hemos cruzado.
Miro lo otro ahora y gracias de nuevo.
-
En la consola me devuelve solamente un nº: 7.82, que me imagino será la versión de exiftool.
Y en el gestor de paquetes Synaptic aparece zenity instalado.
-
Le cambias los permisos para que sea ejecutable.
¿Cómo se cambian los permisos?
Bueno, voy aprendiendo poco a poco y aquí me respondo yo mismo. Veo que los permisos se cambian con botón derecho y en la pestaña Permisos clicar en Permitir ejecutar el archivo como un programa.
Lo guardas con el nombre 'clasifica' en una carpeta que esté en el path (Yo la guardo en la carpeta bin dentro de la carpeta home de mi usuario).
¿Cuál es el path? ¿Cual es la carpeta bin? Yo en mi carpeta no encuentro ninguna con ese nombre.
Respecto a estas dudas: encuentro la carpeta bin en Lugares > Equipo > Sistema de Archivos, pero no sé si es ahí donde tengo que pegar el archivo "clasifica". He intentado pegarla ahí una vez pero no me ha dado permiso para hacerlo. Esta carpeta está fuera de home y no sé si liaré alguna metiéndome donde no debo. :?
P.D.: Por si acaso, utilizo Ubuntu 9.10.
Un saludo,
Andoni
-
Los permisos de ejecución se los puedes dar también desde consola con
$ chmod +x programa
Aunque si tengo el administrador de archivos abierto lo suelo hacer con el ratón.
El path es una variable que contiene los sitios a buscar programas cuando no los encuentra en el directorio desde el que los llamas. Teclea
$ echo $PATH
y te dirá que directorios tienes tú accesibles.
El /bin, que es el que te refieres de ...->sistema de archivos, es para los programas instalados para todos los usuarios. El que se refiere Redy es uno en tu propio home. Las instalaciones suelen crear un /home/usuario/bin para poner ahí los ejecutables que tú vas creando. Si no lo tienes creado, puedes hacerlo y poner ahí los scripts que vayas usando.
Si te ha salido en la variable $PATH, ya está listo. Si no salía, después de crearlo tecleas
$ export PATH=$PATH:/home/tuusuario/bin
Y ya lo tienes.
-
El path es una variable que contiene los sitios a buscar programas cuando no los encuentra en el directorio desde el que los llamas. Teclea
$ echo $PATH
y te dirá que directorios tienes tú accesibles.
Esto me devuelve:
andoni@andoni-desktop:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
andoni@andoni-desktop:~$
-
¿Cuál es el path?
El path es una variable de entorno que indica separadas por ':' las carpetas en las que se buscarán los ficheros ejecutables si no se indica en que carpeta están al ejecutarlos.
echo $PATH
¿Cual es la carpeta bin?
Yo en mi carpeta no encuentro ninguna con ese nombre.
Depende de las distribuciones en algunas /home/USUARIO/bin (o lo que es lo mismo ~/bin) se crea por defecto y se añade al path. Si no es tu caso puedes crearla (desde el nautilus o el navegador de ficheros que uses) y editar el fichero .bashrc para añadirle al final una línea que ponga
PATH="$PATH:~/bin"
Para editar el fichero puedes buscarlo en tu carpeta home, teniendo en cuenta que tienes que visualizar los ficheros ocultos para verlo, y editarlo o puedes poner en un terminal:
gedit ~/.bashrc
(El símbolo ~ lo consigues en un teclado español con la tecla [Alt Gr]+[Ñ] o [Alt Gr]+la que tiene el Interrogante de abrir y la admiración de abrir.)
Otra posibilidad si no quieres crear la carpeta bin ni tocar los paths es que pongas el path completo en la línea exec del fichero .desktop.
Supongamos que guardaste el script clasifica en /home/kallh pues modificas la línea exec del .desktop para que en vez de poner:
Exec=clasifica %F
ponga:
Exec=/home/kallh/clasifica %F
¿Cómo se cambian los permisos?
Desde el nautilus le das con el botón derecho al archivo, propiedades, permisos y marcas 'Permitir ejecutar...'
Desde comando:
chmod +x nombre_del_archivo
-
Gracias Colegota y Redy. q:)
Ahora tengo que ir al curro, así que seguiré con ello al mediodía o a la noche. Como no estoy muy acostumbrado a la línea de comandos y demás, tengo que leerlo tranquilamente y digerirlo poco a poco para enterarme bien de lo que hago.
Un saludo,
Andoni
-
A partir del podcast me di cuenta que la manera de ordenar las fotos de Tomás y la mía son muy parecidas y me decidí a adoptar el script de Redy en su formato para Geeqie. Funciona a las mil maravillas, con algún cambio que he puesto para adaptarlo a mi forma de clasificar.
Sin embargo, he hecho una segunda versión en la que aprovecho para introducir los datos de autoría y licencia en los RAW. Y esa no funciona tan bien y no me lo explico :?
Veamos: la versión de Redy mueve las fotos de la tarjeta al directorio que corresponde y eso es lo que me interesa. Sin embargo, la versión "ampliada" sólo copia las imágenes por lo que después tengo que andar borrando a mano, por no hablar de la confusión cuando las fotos de un mismo tema no van consecutivas.
Estos son los códigos. Versión Redy normal:
Exec=VAR=$(zenity --entry --text="Motivo fotográfico") && exiftool '-Directory<DateTimeOriginal' -d "/home/imagenes/%%Y/%%m %%B/%%d${VAR:+ $VAR}" %F
Y esta es mi versión, que sólo añade dos opciones de inserción de datos EXIF:
Exec=VAR=$(zenity --entry --text="Motivo fotográfico") && exiftool -Artist='Manuel Apellidos http://mpancorbo.ipernity.com' -'Copyright Owner=CC-BY - http://creativecommons.org/licenses/by/3.0/' '-Directory<DateTimeOriginal' -d "/home/imagenes/%%Y/%%m %%B/%%d${VAR:+ $VAR}" %F
¿Qué pasa? ::)
-
Gracias Colegota y Redy. q:)
Ahora tengo que ir al curro, así que seguiré con ello al mediodía o a la noche. Como no estoy muy acostumbrado a la línea de comandos y demás, tengo que leerlo tranquilamente y digerirlo poco a poco para enterarme bien de lo que hago.
Pero hazle caso a Redy con lo del .bashrc porque yo he respondido muy deprisa y lo del export es solución momentánea que, o se pone siempre para llamarlo o se pierde al cerrar la sesión. Así que grabarlo en el .bashrc es más práctico. Y yo me iría más por lo de crearte la carpeta bin en home, que seguro que a partir de ahora comenzarás a añadir scripts con frecuencia. :)
-
Bueno, por fín tengo el script funcionando.
He creado la carpeta bin en mi usuario y he modificado el archivo .bashrc añadiéndole al final
PATH="$PATH:~/bin"
tal y como me ha indicado Redy.
He modificado la ruta del DIR a donde quería que me copiara las fotos (que la tenía mal escrita). Al principio no me funcionaba el script pero le he dado permiso de ejecución al archivo creado en .config/geeqie/applications y por fín está todo funcionando. Ahora tengo que decidir qué tipo de jerarquía quiero para la clasificación en años, meses y días, pero eso lo tendré que dejar para mañana que se me cierran las pestañas.
De nuevo mil gracias a Redy y Colegota por vuestra ayuda. :chin:
Y espero no ser muy pesado, aunque conociéndome presumo que habrá más peticiones de ayuda. :sonroja2:
Un saludo,
Andoni
-
Una corrección de la que me acabo de dar cuenta:
Si la carpeta de dónde importamos las fotos tiene un tipo de fichero case-insensitive, por ejemplo FAT, lo cual suele ser usual en tarjetas de memoria, es mejor poner la lista de ficheros con la extensión en minúsculas primero ("jpg JPG nef NEF ..." y no "JPG jpg NEF nef ...") para que el destino lo ponga en minúsculas, porque como el mismo fichero lo va a encontrar de las dos formas, lo grabará en la primera de la lista.
-
Buenas,
Una corrección de la que me acabo de dar cuenta:
Pues nada, que se agradece la información o mejor dicho la corrección q:)
Ta lu3go
-
Corregido :-) y apuntada la modificación de Manolo
-
Veamos: la versión de Redy mueve las fotos de la tarjeta al directorio que corresponde y eso es lo que me interesa. Sin embargo, la versión "ampliada" sólo copia las imágenes por lo que después tengo que andar borrando a mano, por no hablar de la confusión cuando las fotos de un mismo tema no van consecutivas.
La explicación la tienes en la página de exiftool (http://www.sno.phy.queensu.ca/~phil/exiftool/filename.html):
Notes:
Writing the FileName and/or Directory tags alone causes the file to be renamed or moved, not copied. However, if any other tags are written at the same time, then the file is rewritten to the new destination and the original file is left unchanged. (The only exception to this is FileModifyDate tag, which will not cause the file to be rewritten because it is the only other writable tag not representing meta information within the file.) But if desired, the -overwrite_original option may be used in this case to remove the original copy.
Vamos que el exiftool si solo le pasas el parámetro -directory o -filename efectivamente mueve o renombra el fichero, pero si le pasas cualquier otro parámetro a parte de esos, que modifique algun tag, deja la copia original intacta. (Si le modificas los tags sin cambiarle el directorio o el filename también te deja la copia original añadiendole la palabra _original al final). Para evitar que deje la copia, tanto en uno como en otro caso, has de añadir el parámetro -overwrite_original.
-
Pues por fin he tenido tiempo de poner en marcha el script, fuciona perfectamente, gracias Redy por la explicación, como siempre muy efectiva.
-
Aunque está un poco chapuza les dejo el código de mi script final.
Ordena en tres directorios distintos uno para las fotos, otro los negativos (raw) y otros los videos.
Para los jpeg pone un comentario con el autor y la licencia.
A ver cuando me pongo con uno en perl un poco más serio...
#! /bin/bash
#
# original en http://comunidad.fotolibre.net/index.php/topic,5670.0.html
#
# v00.1 Modificado por FJA
# 11-08-2010
# agregado 2 loops para poner negativos y videos.
#
BASEDIR="/disco2"
FOTOS_DIR="$BASEDIR/Pictures"
NEGATIVOS_DIR="$BASEDIR/Negativos"
VIDEOS_DIR="$BASEDIR/Videos"
#EXT="jpg JPG jpeg JPEG png PNG nef NEF orf ORF raw RAW crw CRW cr2 CR2 dng DNG avi AVI"
FOT="jpg JPG jpeg JPEG"
NEG="nef NEF orf ORF raw RAW crw CRW cr2 CR2 dng DNG"
VID="avi AVI"
COMENTARIO="Fernando Jose Andrade,http://www.fjandrade.com,C:Attribution Creative Commons"
#
MOTIVO=$(zenity --entry --text="Motivo fotográfico")
while (( $# >= 1 )); do
NOMBRE="${1%.*}"
for j in $FOT; do
if [[ -f "${NOMBRE}.$j" ]]; then
exiftool '-Directory<DateTimeOriginal' \
-d "$FOTOS_DIR/%Y/%m${MOTIVO:+_$MOTIVO}" \
-Comment="$COMENTARIO" -overwrite_original \
"${NOMBRE}.$j"
fi
done
for k in $NEG; do
if [[ -f "${NOMBRE}.$k" ]]; then
exiftool '-Directory<DateTimeOriginal' \
-d "$NEGATIVOS_DIR/%Y/%m${MOTIVO:+_$MOTIVO}" \
"${NOMBRE}.$k"
fi
done
for l in $VID; do
if [[ -f "${NOMBRE}.$l" ]]; then
exiftool '-Directory<DateTimeOriginal' \
-d "$VIDEOS_DIR/%Y/%m${MOTIVO:+_$MOTIVO}" \
"${NOMBRE}.$l"
fi
done
shift
done
Saludos.
FJA
-
Aunque está un poco chapuza les dejo el código de mi script final.
Ordena en tres directorios distintos uno para las fotos, otro los negativos (raw) y otros los videos.
Para los jpeg pone un comentario con el autor y la licencia.
A ver cuando me pongo con uno en perl un poco más serio...
Gracias por mejorarlo, y sobre todo por compartirlo. :-)
-
Buenas,
Gracias por mejorarlo, y sobre todo por compartirlo.
q:)
Ta lu3go
-
Gracias por compartirlo Jotawolf :-)
-
Gracias por el aporte jotawolf :ok:
-
¡Qué bueno el script este de ordenar por fecha! Yo tenía uno para renombrar los archivos añadiéndole la fecha de creación del fichero en la tarjeta, pero este creo que es mucho mejor que el que yo tenía.
Muchas gracias por compartirlo.
Salud!
-
Buenas,
Gracias, redy, me lo apunto para la próxima revisión de mi flujo. :-?
Bien, pues en eso estoy... :sonroja2:
Me encuentro revisando mi método de organización y estoy atascado. En estos momentos, la estructura de directorios que tengo es la que presenta redy en su script, es decir, YYYY/MM/DD_Motivo, pero me gustaría renombrar los archivos originales por YYMMDD_Motivo_###.ext, donde las almohadillas representarían la numeración de éstos. ¡Ah! otra cosa... ¿se puede forzar que la extensión vaya en minúsculas independientemente del original?
-
...
Me encuentro revisando mi método de organización y estoy atascado. En estos momentos, la estructura de directorios que tengo es la que presenta redy en su script, es decir, YYYY/MM/DD_Motivo, pero me gustaría renombrar los archivos originales por YYMMDD_Motivo_###.ext, donde las almohadillas representarían la numeración de éstos. ¡Ah! otra cosa... ¿se puede forzar que la extensión vaya en minúsculas independientemente del original?
Retomo este hilo porque yo quisiera hacer lo mismo y no soy capaz. Suponía que, partiendo del script "clasifica", se podría, además de clasificar las fotos por fechas y motivo, utilizar este último, junto con algún comando de exiftool, para renombrar y clasificar las fotos de un plumazo. Yo he intentado modificar el script de redy, pero, quizá por no tener ni idea de bash, no he conseguido nada. ¿Hay alguna solución que yo no haya encontrado? Si no la hay, quizá a alguno de estos genios del bash le pique el gusanillo...
Un saludo a todos,
Marcial
-
Me encuentro revisando mi método de organización y estoy atascado. En estos momentos, la estructura de directorios que tengo es la que presenta redy en su script, es decir, YYYY/MM/DD_Motivo, pero me gustaría renombrar los archivos originales por YYMMDD_Motivo_###.ext, donde las almohadillas representarían la numeración de éstos. ¡Ah! otra cosa... ¿se puede forzar que la extensión vaya en minúsculas independientemente del original?
Por numeración ¿te refieres a la parte númerica del nombre original del archivo, o a otra cosa? ¿No te vale con el nombre original entero?
Se me está ocurriendo que si se puede hacer todo eso que dices, solo es cuestión de calcular un par de cosas antes del exiftool.
Para la extensión en minúsculas habría que guardarla en una variable, y también habría que guardar en una variable el nombre original solamente.
ext1="$( echo $j| tr [:upper:] [:lower:])"
solonombre="${NOMBRE##*/}"
Y luego se usaría algo como:
exiftool -overwrite_original \
'-Filename<DateTimeOriginal' \
-d "$DIR/%Y/%m/%Y%m%d_${VAR:+_$VAR}_$solonombre.$ext1" \
"${NOMBRE}.$j"
Estoy diciéndolo de memoria, así que haced los experimentos con gaseosa (o sea con copias de archivos que no os importe perder por si acaso)....
-
Por numeración ¿te refieres a la parte númerica del nombre original del archivo, o a otra cosa? ¿No te vale con el nombre original entero?
Me refiero al número de orden de las fotos dentro del directorio. Yo suelo renombrar las fotos que importo desde la tarjeta desde YYMMDD_Motivo_001.ext a YYMMDD_Motivo_XXX.ext; es decir, que me olvido del nombre de archivo que le da la cámara por completo.
Se me está ocurriendo que si se puede hacer todo eso que dices, solo es cuestión de calcular un par de cosas antes del exiftool.
...
Estoy diciéndolo de memoria, así que haced los experimentos con gaseosa (o sea con copias de archivos que no os importe perder por si acaso)....
Voy a tomarme un café y hago las pruebas... ya te contaré. :asias:
-
...
Voy a tomarme un café y hago las pruebas... ya te contaré. :asias:
No me aclaro sobre dónde intercalar este nuevo trozo de código. A continuación pego el código del script tal y como lo tengo:
#! /bin/bash
#
# Las siguientes dos variables pueden ser ajustadas segun tus preferencias
#
# DIR es el directorio padera a dónde se van a mover las fotos se crearán
# subcarpetas para el año, mes y día_Motivo. Si quieres otra estructura
# distinta deberás modificar el comando exiftool.
#
# EXT son las extensiones que se verán afectadas, normalmente jpg y el raw
# de tu cámara. Ponlo en mayúsculas y en minúsculas por si acaso.
#
DIR="/home/portillobarrera/Imágenes/Archivo"
EXT="jpg JPG jpeg JPEG nef NEF orf ORF raw RAW crw CRW cr2 CR2 rw2 RW2 dng DNG"
#
VAR=$(zenity --entry --text="Motivo fotográfico")
while (( $# >= 1 )); do
NOMBRE="${1%.*}"
for j in $EXT; do
if [[ -f "${NOMBRE}.$j" ]]; then
exiftool -Artist='Luis M. Portillo Barrera [portillobarrera@lavabit.com]' -Copyright='Copyleft :) cc-by-sa
Puedes copiar, distribuir, publicar y modificar esta fotografia bajo las condiciones expresadas en http://creativecommons.org/licenses/by-sa/3.0/es/' '-Directory<DateTimeOriginal' \
-d "$DIR/%Y/%m/%d${VAR:+_$VAR}" -overwrite_original \
"${NOMBRE}.$j"
fi
done
shift
done
-
No me aclaro sobre dónde intercalar este nuevo trozo de código. A continuación pego el código del script tal y como lo tengo:
#! /bin/bash
#
# Las siguientes dos variables pueden ser ajustadas segun tus preferencias
#
# DIR es el directorio padera a dónde se van a mover las fotos se crearán
# subcarpetas para el año, mes y día_Motivo. Si quieres otra estructura
# distinta deberás modificar el comando exiftool.
#
# EXT son las extensiones que se verán afectadas, normalmente jpg y el raw
# de tu cámara. Ponlo en mayúsculas y en minúsculas por si acaso.
#
DIR="/home/portillobarrera/Imágenes/Archivo"
EXT="jpg JPG jpeg JPEG nef NEF orf ORF raw RAW crw CRW cr2 CR2 rw2 RW2 dng DNG"
#
VAR=$(zenity --entry --text="Motivo fotográfico")
while (( $# >= 1 )); do
NOMBRE="${1%.*}"
for j in $EXT; do
if [[ -f "${NOMBRE}.$j" ]]; then
ext1="$( echo $j| tr [:upper:] [:lower:])"
solonombre="${NOMBRE##*/}"
exiftool -Artist='Luis M. Portillo Barrera [portillobarrera@lavabit.com]' -Copyright='Copyleft :) cc-by-sa
Puedes copiar, distribuir, publicar y modificar esta fotografia bajo las condiciones expresadas en http://creativecommons.org licenses/by-sa/3.0/es/' '-Filename<DateTimeOriginal' \
-d "$DIR/%Y/%m/%Y%m%d_${VAR:+_$VAR}_$solonombre.$ext1" -overwrite_original \
"${NOMBRE}.$j"
fi
done
shift
done
-
Gracias por tu ayuda,
Te cuento como van las pruebas...
Después de unas mínimas correcciones/adaptaciones:
-d "$DIR/%Y/%m/%d${VAR:+_$VAR}/%y%m%d${VAR:+_$VAR}_$solonombre.$ext1" -overwrite_original \
"${NOMBRE}.$j"
aún no obtengo exactamente lo que pretendo. Me mueve las fotos al directorio del día en que fueron tomadas, con el motivo, y renombra las fotos tal que así: yyMMDD_Motivo_NombreOriginal.ext.
Me gustaría sobreescribir el nombre original y colocar en su lugar la numeración como comenté antes... ¿se puede?
Gracias otra vez, :-)
-
...
Me gustaría sobreescribir el nombre original y colocar en su lugar la numeración como comenté antes... ¿se puede?
Casi lo tengo cambiando
solonombre="${NOMBRE##*/}"
por
solonombre="${###}"
pero solo me pone una cifra (1) y yo quiero tres (001)... :?
-
Me gustaría sobreescribir el nombre original y colocar en su lugar la numeración como comenté antes... ¿se puede?
Poder se podrá, lo que pasa es que no se me ocurre cómo. Me surgen mas complicaciones que soluciones. :?
-
Me gustaría sobreescribir el nombre original y colocar en su lugar la numeración como comenté antes... ¿se puede?
Poder se podrá, lo que pasa es que no se me ocurre cómo. Me surgen mas complicaciones que soluciones. :?
Eso ya está superado... al final, el discípulo :collejas: al maestro... :toma:
Solo me falta lo de las tres cifras en la numeración. :?
-
Eso ya está superado... al final, el discípulo :collejas: al maestro... :toma:
Solo me falta lo de las tres cifras en la numeración. :?
Lo de poner un contador ya se me había ocurrido, (aunque con ${###} no creo que funcione). ${#} es el número de parámetros pasados al script, como usamos shift se va decrementando en uno cada vez que procesamos un parámetro así que podría usarse como contador inverso.
pero ¿Como cuenta el contador desde 1 siempre que aplico el script? ¿Que pasa si luego añado más imágenes a la misma carpeta, vuelve a contar desde 1 o tiene que mirar cual es la última? Y si las fotos son de fechas distintas y por lo tanto van a carpetas distintas ¿Como sabría el contador que tiene que volver a empezar?
-
...
pero ¿Como cuenta el contador desde 1 siempre que aplico el script? ¿Que pasa si luego añado más imágenes a la misma carpeta, vuelve a contar desde 1 o tiene que mirar cual es la última? Y si las fotos son de fechas distintas y por lo tanto van a carpetas distintas ¿Como sabría el contador que tiene que volver a empezar?
Mmmm... gran dilema... :? Nunca me ha ocurrido que tuviera que meter en la misma carpeta fotos de distintas sesiones; lo normal hasta ahora ha sido repartir en distintas carpetas fotos de la misma sesión porque tuvieran diferentes motivos, pero tienes razón: se puede dar el caso de que dos descargas distintas del mismo día y mismo motivo acaben en la misma carpeta o que una descarga con fotos de distintos días se dividan en varias carpetas y la numeración ya no seguiría el patrón que yo quiero... :?
-
Ah, para lo de tres cifras puedes usar printf:
solonombre="$(printf %03d ${#})"
-
Ah, para lo de tres cifras puedes usar printf:
solonombre="$(printf %03d ${#})"
Perfecto. :-)
Por lo pronto lo dejo así. A ver si un día de estos que estés aburrido lo perfeccionamos... :)o
Gracias, apúntate unas cuantas... :chin:
-
...
Perfecto. :-)
Por lo pronto lo dejo así. A ver si un día de estos que estés aburrido lo perfeccionamos... :)o
...
Pego aquí el código actual por si a alguien le sirve mi método:
#! /bin/bash
#
# Las siguientes dos variables pueden ser ajustadas segun tus preferencias
#
# DIR es el directorio padera a dónde se van a mover las fotos se crearán
# subcarpetas para el año, mes y día_Motivo. Si quieres otra estructura
# distinta deberás modificar el comando exiftool.
#
# EXT son las extensiones que se verán afectadas, normalmente jpg y el raw
# de tu cámara. Ponlo en mayúsculas y en minúsculas por si acaso.
#
DIR="/home/portillobarrera/Imágenes/Archivo"
EXT="jpg JPG jpeg JPEG nef NEF orf ORF raw RAW crw CRW cr2 CR2 rw2 RW2 dng DNG"
#
VAR=$(zenity --entry --text="Motivo fotográfico")
while (( $# >= 1 )); do
NOMBRE="${1%.*}"
for j in $EXT; do
if [[ -f "${NOMBRE}.$j" ]]; then
ext1="$( echo $j| tr [:upper:] [:lower:])"
solonombre="$(printf %03d ${#})"
exiftool -Artist='Luis M. Portillo Barrera [portillobarrera@lavabit.com]' -Copyright='Copyleft :) cc-by-sa
Puedes copiar, distribuir, publicar y modificar esta fotografia bajo las condiciones expresadas en
http://creativecommons.org licenses/by-sa/3.0/es/' '-Filename<DateTimeOriginal' \
-d "$DIR/%Y/%m/%d${VAR:+_$VAR}/%y%m%d${VAR:+_$VAR}_$solonombre.$ext1" -overwrite_original \
"${NOMBRE}.$j"
fi
done
shift
done
-
[nota mental]
Ayer estuve haciendo unas pruebas y, al descargar de la tarjeta, me numera las fotos al revés, es decir, del 001 para la más reciente, hasta la que sea para la primera que hice de esa descarga. :?
No tuve tiempo para probar en profundidad; esta tarde procuraré mirarlo con más detenimiento. :lee:
[/nota mental]
-
[nota mental]
Ayer estuve haciendo unas pruebas y, al descargar de la tarjeta, me numera las fotos al revés, es decir, del 001 para la más reciente, hasta la que sea para la primera que hice de esa descarga. :?
No tuve tiempo para probar en profundidad; esta tarde procuraré mirarlo con más detenimiento. :lee:
[/nota mental]
Claro, ya te dije que ${#} era el número de parámetros que quedan por procesar. Si se supone que las fotos se pasan en orden al script la cuenta es de N a 1
Para darle la vuelta puedes poner antes del while
N=${#}
Y cambiar el printf por
solonombre="$(printf %03d $(( N + 1 - ${#} )) )"
-
Sigo pensando que, cuando alguien escribe en el foro algo de código, suena esto (http://upload.wikimedia.org/wikipedia/commons/3/37/Alarm_-_Diving_-_H8.ogg) en tu casa y se encienden las luces rojas... :toma:
Gracias mil, funciona a las mil maravillas. :-)
#! /bin/bash
#
# Las siguientes dos variables pueden ser ajustadas segun tus preferencias
#
# DIR es el directorio padera a dónde se van a mover las fotos se crearán
# subcarpetas para el año, mes y día_Motivo. Si quieres otra estructura
# distinta deberás modificar el comando exiftool.
#
# EXT son las extensiones que se verán afectadas, normalmente jpg y el raw
# de tu cámara. Ponlo en mayúsculas y en minúsculas por si acaso.
#
DIR="/home/portillobarrera/Imágenes/Archivo"
EXT="jpg JPG jpeg JPEG nef NEF orf ORF raw RAW crw CRW cr2 CR2 rw2 RW2 dng DNG"
#
VAR=$(zenity --entry --text="Motivo fotográfico")
N=${#}
while (( $# >= 1 )); do
NOMBRE="${1%.*}"
for j in $EXT; do
if [[ -f "${NOMBRE}.$j" ]]; then
ext1="$( echo $j| tr [:upper:] [:lower:])"
solonombre="$(printf %03d $(( N + 1 - ${#} )) )"
exiftool -Artist='Luis M. Portillo Barrera [portillobarrera@lavabit.com]' -Copyright='Copyleft :) cc-by-sa
Puedes copiar, distribuir, publicar y modificar esta fotografia bajo las condiciones expresadas en
http://creativecommons.org licenses/by-sa/3.0/es/' '-Filename<DateTimeOriginal' \
-d "$DIR/%Y/%m/%d${VAR:+_$VAR}/%y%m%d${VAR:+_$VAR}_$solonombre.$ext1" -overwrite_original \
"${NOMBRE}.$j"
fi
done
shift
done
Modificado para enlazar a contenido libre. ;)
-
... al script tal como está le veo un peligro. Si le corres el script a dos grupos de fotos del mismo día y mismo motivo fotográfico, el segundo grupo machacará a las fotos del primer grupo...
Cambiando la linea de código donde se define solonombre de la forma siguiente
# solonombre="$(printf %03d $(( N + 1 - ${#} )) )"
solonombre="${NOMBRE: (-4)}"
se conservaría la numeración de la foto dentro de la tarjeta, y así no habría peligro de machacar unas fotos con otras.
... aunque lo mismo no es eso lo que se buscaba.
-
... al script tal como está le veo un peligro. Si le corres el script a dos grupos de fotos del mismo día y mismo motivo fotográfico, el segundo grupo machacará a las fotos del primer grupo...
Acabo de hacer la prueba y lo que ocurre es que la deja tal cual... Me explico: dos fotos del mismo día, selecciono la primera y le aplico el script... bien. Selecciono luego la otra, le aplico el script (con el mismo asunto) y no le hace nada. :ejem:
Lo ideal sería que, al ver que ya hay un archivo con ese nombre, le asigne el siguiente según la numeración... :? Lo digo por si alguno está aburrido y quiere mirarlo... :)o
-
... al script tal como está le veo un peligro. Si le corres el script a dos grupos de fotos del mismo día y mismo motivo fotográfico, el segundo grupo machacará a las fotos del primer grupo...
Acabo de hacer la prueba y lo que ocurre es que la deja tal cual... Me explico: dos fotos del mismo día, selecciono la primera y le aplico el script... bien. Selecciono luego la otra, le aplico el script (con el mismo asunto) y no le hace nada. :ejem:
El exiftool es lo bastante inteligente para no sobrescribir el archivo ya existente...
Lo ideal sería que, al ver que ya hay un archivo con ese nombre, le asigne el siguiente según la numeración... :? Lo digo por si alguno está aburrido y quiere mirarlo... :)o
No sería difícil contar los archivos que hay y numerar a partir de ahí. El problema es que hasta que exiftool no decide a que carpeta lo manda mirando la fecha del archivo no sabemos en que carpeta hay que contar. En resumen que lo bonito del script tal como estaba al principio es que exiftool hace todo en un paso, ver la fecha de la foto y crear la carpeta si es necesario y meter las fotos en ella. Tengo que estudiar mejor el exiftool a ver si se me escapa alguna posibilidad, de lo contrario es mejor replantearse el script desde el principio para que exiftool solo obtenga la fecha, y el resto lo hagamos con bash .
-
Juuueeee, a este paso, no solo te va a ordenar las fotos, también te va a preparar la cena mientras y te va a dar un masaje en el cuello y otro en los pies :o
-
El problema es que hasta que exiftool no decide a que carpeta lo manda mirando la fecha del archivo no sabemos en que carpeta hay que contar. En resumen que lo bonito del script tal como estaba al principio es que exiftool hace todo en un paso, ver la fecha de la foto y crear la carpeta si es necesario y meter las fotos en ella. Tengo que estudiar mejor el exiftool a ver si se me escapa alguna posibilidad, de lo contrario es mejor replantearse el script desde el principio para que exiftool solo obtenga la fecha, y el resto lo hagamos con bash .
Pues creo que se me escapaba. Podemos usar %1.4C en el nombre para darle un numero secuencial de cuatro cifras comenzando en 1 y creo que funcionaría. Prueba a ponerle %1.4C en donde poníamos $solonombre a ver si funciona.
-
Pues creo que se me escapaba. Podemos usar %1.4C en el nombre para darle un numero secuencial de cuatro cifras comenzando en 1 y creo que funcionaría. Prueba a ponerle %1.4C en donde poníamos $solonombre a ver si funciona.
En cuanto tenga un rato lo pruebo... ahora voy apurado...
Muchísimas gracias. q:)
-
#! /bin/sh
#
# Las siguientes dos variables pueden ser ajustadas segun tus preferencias
#
# DIR es el directorio padera a dónde se van a mover las fotos se crearán
# subcarpetas para el año, mes y día_Motivo. Si quieres otra estructura
# distinta deberás modificar el comando exiftool.
#
# EXT son las extensiones que se verán afectadas, normalmente jpg y el raw
# de tu cámara. Ponlo en mayúsculas y en minúsculas por si acaso.
#
DIR="/home/redy/Imágenes/Archivo"
EXT="jpg JPG jpeg JPEG nef NEF orf ORF raw RAW crw CRW cr2 CR2 dng DNG"
#
VAR=$(zenity --entry --text="Motivo fotográfico")
while (( $# >= 1 )); do
NOMBRE="${1%.*}"
for j in $EXT; do
if [[ -f "${NOMBRE}.$j" ]]; then
exiftool -Artist='Luis M. Portillo Barrera [portillobarrera@lavabit.com]'\
-Copyright='Copyleft :) cc-by-sa Puedes copiar, distribuir, publicar y modificar esta fotografia bajo las condiciones expresadas en http://creativecommons.org/licenses/by-sa/3.0/es/' \
'-Filename<'"$DIR/"'${DateTimeOriginal}'"${VAR:+_$VAR}"'%+.4c.%le' \
-d "%Y/%m/%Y%m%d" -overwrite_original \
"${NOMBRE}.$j"
fi
done
shift
done
Lo he clarificado un poco poniendo el el -d solo lo que es formato de fecha y en el -filename todo lo demás. Ojo a la sucesión de comillas porque hay variables que serán procesadas por bash y esas van entre comillas dobles y otras que seran procesadas por exiftool y esas van entre comillas simples.
La línea '-Filename<'"$DIR/"'${DateTimeOriginal}'"${VAR:+_$VAR}"'%+.4c.%le' \ significa que meta todo en el directorio $DIR definido al principio, seguido del formato de fecha, que como lleva barras creará carpetas para año y mes, y dentro de estaas un nombre de fichero con año, mes y día concatenados, Luego el nombre de lo que se ha tecleado en la caja de la pregunta (prefijado con un _ a no ser que esté vacío). Y al final un número secuencial de cuatro cifras que comienza en _0000 (%+.4c) y la extensión en minúscula (.%le). El número solo se incrementa si existe un archivo igual, esto quiere decir que los archivos con distintas extensiones si han sido procesados juntos tendrán el mismo número, y por tanto geeqie los seguirá agrupando.
(Si intento que empiece en 1 con %+4c sin el punto me crea un archivo sin número y el resto comenzando en 0001) :-(
-
Joer como avanza este script. Sólo una pregunta ¿porqué os cargáis la numeración que le pone la cámara?. Se puede mantener este nombre y a continuación poner el nombre del trabajo, te evitas el contador ¿no?.
Un beso guapos y guapas, cuanto tiempo...
-
Joer como avanza este script. Sólo una pregunta ¿porqué os cargáis la numeración que le pone la cámara?.
Ni idea, pregúntale al Invi. Yo dejo el nombre que pone la cámara, es más tengo la cámara ajustada para que aunque formatees la tarjeta siga con la numeración sin empezar de cero.
-
Pues eso Redy, yo también lo hago así. Que ganas de complicar la vida.
Un abrazo gallego que me alegro de verte y un beso a la familia ;)