Discussion:
Ayuda para crear un script
(demasiado antiguo para responder)
xabih
2020-01-19 18:53:37 UTC
Permalink
Hola.

Busco ayuda para crear un script que haga lo siguiente:

Tengo un conjunto de archivos jpg en distintos subdirectorios dentro de un directorio “reveladas”.

Tengo otro conjunto de archivos jpg todos en un único directorio “reveladas_HR”

Se trata de las mismas imágenes con la diferencia de que las primeras están a menor resolución.

Los primeros 21 carácteres de una misma foto son los mismos, esto es, por ejemplo para una foto dada tengo:

../reveladas/[subdirectorio]/201712291421_IMG_5380[descripcion].jpg <- Foto en baja res.
../reveladas_HR/201712291421_IMG_5380.jpg <- foto en alta res.

Lo que quiero hacer es:

En un tercer directorio “reveladas_new” crear la misma estructura de subdirectorios que hay dentro de “reveladas” con las mismas fotos pero en alta resolución cuando existan en “reveladas_HR”, si no, copiar las de baja resolución.

Además de copiar la foto en alta resolución, hay que modificarle el nombre para que tenga el mismo que la de baja resolución (con la parte [descripcion] si la tiene) y copiarle algunos tags de los metadatos EXIF de la de baja resolución a la de alta resolución, esto ultimo lo hago con un comando de exiftools.

Espero haberlo explicado bien, ¿lo veis factible?
Carlos E.R.
2020-01-19 21:20:36 UTC
Permalink
Post by xabih
Hola.
Tengo un conjunto de archivos jpg en distintos subdirectorios dentro de un directorio “reveladas”.
Tengo otro conjunto de archivos jpg todos en un único directorio “reveladas_HR”
Se trata de las mismas imágenes con la diferencia de que las primeras están a menor resolución.
../reveladas/[subdirectorio]/201712291421_IMG_5380[descripcion].jpg <- Foto en baja res.
../reveladas_HR/201712291421_IMG_5380.jpg <- foto en alta res.
En un tercer directorio “reveladas_new” crear la misma estructura de subdirectorios que hay dentro de “reveladas” con las mismas fotos pero en alta resolución cuando existan en “reveladas_HR”, si no, copiar las de baja resolución.
Además de copiar la foto en alta resolución, hay que modificarle el nombre para que tenga el mismo que la de baja resolución (con la parte [descripcion] si la tiene) y copiarle algunos tags de los metadatos EXIF de la de baja resolución a la de alta resolución, esto ultimo lo hago con un comando de exiftools.
Espero haberlo explicado bien, ¿lo veis factible?
Creo que es factible, pero tendría que dedicarle un montón de horas para
intentarlo y saber si realmente se puede. Es cuestión de empezar por
algún sitio e ir añadiendo detalles hasta que esté completo. Una
pesadez. :-)
--
Cheers, Carlos.
Gonzalo Pérez de Olaguer Córdoba
2020-01-19 23:18:06 UTC
Permalink
Hola xabih,

lo has explicado bien y es factible.

Lo más fácil sería hacer un 'shell script', pero como te comenta
Carlos E.R., es un poco currito.

¿Qué experiencia tienes escribiendo scripts para sh/dash/bash, etc.?
Básicamente es lo mismo que escribir en la línea de comandos, salvo que
puedes usar estructuras de control para hacer bucles, saltos
condicionales, etc.

Un tutorial completo para hacer lo que quieres, a partir de cero,
ocuparía bastantes cientos de líneas.

Si explicas hasta dónde llegas tú solo y dónde te quedas bloqueado
será más fácil sugerirte maneras de continuar.

Saludos,
Gonzalo.
--
Gonzalo Pérez de Olaguer Córdoba ***@gpoc.es
-=- buscando empleo desde 1988 -=- www.gpoc.es

PGP: 3F87 CCE7 8B35 8C06 E637 2D57 5723 9984 718C A614
Ricardo Palomares Martinez
2020-01-24 21:03:42 UTC
Permalink
Post by xabih
Hola.
Tengo un conjunto de archivos jpg en distintos subdirectorios dentro de un directorio “reveladas”.
Tengo otro conjunto de archivos jpg todos en un único directorio “reveladas_HR”
Se trata de las mismas imágenes con la diferencia de que las primeras están a menor resolución.
../reveladas/[subdirectorio]/201712291421_IMG_5380[descripcion].jpg <- Foto en baja res.
../reveladas_HR/201712291421_IMG_5380.jpg <- foto en alta res.
En un tercer directorio “reveladas_new” crear la misma estructura de subdirectorios que hay dentro de “reveladas” con las mismas fotos pero en alta resolución cuando existan en “reveladas_HR”, si no, copiar las de baja resolución.
Además de copiar la foto en alta resolución, hay que modificarle el nombre para que tenga el mismo que la de baja resolución (con la parte [descripcion] si la tiene) y copiarle algunos tags de los metadatos EXIF de la de baja resolución a la de alta resolución, esto ultimo lo hago con un comando de exiftools.
Espero haberlo explicado bien, ¿lo veis factible?
Te copio el script porque el grupo de noticias no lo admite como
adjunto. Este script hace algo mucho más sencillo, renombra archivos y
los renumera (básicamente, lo uso para cambiar la hora que suelen
añadir las cámaras a un contador). Pero usa un bucle, guarda
cuasi-patrones de nombre de archivo en variables y luego las usa,
modificando el nombre. Te puede dar algunas ideas.

HTH

------------------------------
#!/bin/bash
#
# This script renames files in a batch way, giving the opportunity to use
# different numerals for the target than the ones used in the source
#

TEST=$1

if [ -z $TEST ]; then
echo "Formato de llamada: ren_photos.sh [-t] PREFIJO_ORIG
PREFIJO_DEST INICIO [CUENTA]"
echo "Ejemplo: ren_photos.sh 100_10 20100101_00 1 9 convertirá
archivos JPG con el"
echo " formato de nombre 100_1001.JPG, 100_1002.JPG... a
20100101_001.JPG,"
echo " 20100101_002.JPG, etc. hasta un máximo de 9"
exit 0
fi

if [ $TEST = "-t" ]; then
echo "Ejecución en modo test"
SOURCE_PATTERN="$2*"
TARGET_PATTERN=$3
TARGET_START=$4
COUNTER=$5
else
SOURCE_PATTERN="$1*"
TARGET_PATTERN=$2
TARGET_START=$3
COUNTER=$4
fi

if [ -z $COUNTER ]; then
COUNTER=1000
fi

echo "Vamos a convertir archivos del tipo $SOURCE_PATTERN a
$TARGET_PATTERN"
echo "con el numerador $TARGET_START"

for SOURCE in $SOURCE_PATTERN
do
EXT=`basename $SOURCE | cut -d. -f2 -`
TARGET="${TARGET_PATTERN}${TARGET_START}.${EXT}"
echo "Trataremos $SOURCE y lo convertiremos en $TARGET"
if [ $TEST != "-t" ]; then
mv $SOURCE $TARGET
fi
(("TARGET_START=${TARGET_START} + 1"))
(("COUNTER=${COUNTER} - 1"))

if [ $COUNTER -eq 0 ]; then
exit 0
fi
done
------------------------------------

Loading...