Ejecutar script en otro directorio
Hola a todos, esto intentando crear un script para poder descargar todas las fotos de mi camara digital. Lo que quiero es crear un script en /home/usuario/.scripts, poner un lanzador en el panel del escritorio y guardar las fotos en /home/usuario/Imágenes, cada foto en la carpeta que corresponda a su dia. Aqui esta el script: (he modificado uno que encontre en internet)
#!/bin/bash
#
# wmdd - Weapon of Mass Duplicate Detection
#
# I wrote this because I was having a hard time identifying duplicate
# images in my f-spot Photos folder. I decided I should just rename all
# of the pictures based on the EXIF data to YYYY-MM-DD-HH-mm-SS.jpg format.
# If pictures have identical EXIF data, then '_copy' is added to the file
# name. Operation is recursive.
#
# To make it a little easier, I have the script copy pictures to a folder,
# 'exif/YYYY' or 'noexif' depending on whether there is EXIF info or not.
# This also make reimporting to f-spot a little easier.
#
# Requires exif package.
#
# To run, cd to the top-level directory of the images you want to rename.
#
# Todd Slater <dontodd@gmail.com>
# 14 May 2007
# Me descarga todas las fotos en el directorio donde ejecuto
gphoto2 --get-all-files
original_pic_dir=`pwd` # maybe at some point make this an optional argument
cp_dir="/home/usuario/Imágenes"
noexif_dir="/home/usuario/Imágenes/noexif"
# find images
find $original_pic_dir -type f -iname '*.jpg' >> piclist
while read line
do
# test for exif
if [ -z `exif -t DateTimeOriginal "$line"` >/dev/null 2>&1 ] ; then
# no exif, let's copy it to noexif_dir, but not overwrite existing files
pic_name=`echo "$line" |sed s/" "/_/g | xargs basename`
while [ -f "$noexif_dir/$pic_name" ] ;
do
pic_name=`echo "$pic_name" | sed s/\.jpg/_copy\.jpg/`
done
if [ ! -d $noexif_dir ] ; then
mkdir -p $noexif_dir
fi
mv "$line" "$noexif_dir/$pic_name"
else
# has exif, let's rename and copy to exif/YYYY folder
exif -t DateTimeOriginal "$line" |grep Value > exif.$$
year=`cut -b 10-13 "exif.$$"`
month=`cut -b 15-16 "exif.$$"`
day=`cut -b 18-19 "exif.$$"`
hour=`cut -b 21-22 "exif.$$"`
minute=`cut -b 24-25 "exif.$$"`
second=`cut -b 27-28 "exif.$$"`
rm exif.$$
exif_name="$year-$month-$day-$hour-$minute-$second.jpg"
while [ -f "$cp_dir/$year_$month_$day/$exif_name" ] ;
do
exif_name=`echo $exif_name | sed s/\.jpg/_copy\.jpg/`
done
if [ ! -d "$cp_dir/$year-$month-$day" ] ; then
mkdir -p "$cp_dir/$year-$month-$day"
fi
mv "$line" "$cp_dir/$year-$month-$day/$exif_name"
fi
done < piclist
rm -f piclist
Si ejecuto el programa con ./350D.sh me hace bien, pero como lanzador no me ejecuta bien, ya que el comando "gphoto2" me descarga todas las fotos en /home/usuario/.
¿Como puedo hacer que "gphoto2" me descarge todas las fotos en /home/usuario/Imágenes?
He probrado a meterle el path a gphoto2, pero no me funciona.
¿Es posible que el script se ejecute en un directorio especifico?
Seguire buscando, gracias por todo y saludos.
- Inicie sesión o regístrese para enviar comentarios
- 573 lecturas


Asegúrate de que todas las rutas que usas en el script son absolutas.
Si colocas
cd /home/usuario/ImágenesAntes de
# Me descarga todas las fotos en el directorio donde ejecutogphoto2 --get-all-files
?
Que quede
cd /home/usuario/Imágenes# Me descarga todas las fotos en el directorio donde ejecuto
gphoto2 --get-all-files
Muchisimas gracias, lo he arreglado con un "cd", asi queda el script:
#!/bin/bash#
# wmdd - Weapon of Mass Duplicate Detection
#
# I wrote this because I was having a hard time identifying duplicate
# images in my f-spot Photos folder. I decided I should just rename all
# of the pictures based on the EXIF data to YYYY-MM-DD-HH-mm-SS.jpg format.
# If pictures have identical EXIF data, then '_copy' is added to the file
# name. Operation is recursive.
#
# To make it a little easier, I have the script copy pictures to a folder,
# 'exif/YYYY' or 'noexif' depending on whether there is EXIF info or not.
# This also make reimporting to f-spot a little easier.
#
# Requires exif package.
#
# To run, cd to the top-level directory of the images you want to rename.
#
# Todd Slater <dontodd@gmail.com>
# 14 May 2007
# Crear un directorio temporal
temp_dir="/home/usuario/Imágenes/temp-$RANDOM"
mkdir $temp_dir
# Moverse al directorio de trabajo
cd $temp_dir
# Me descarga todas las fotos en el directorio donde ejecuto
gphoto2 --get-all-files
original_pic_dir=$temp_dir
cp_dir="/home/usuario/Imágenes"
noexif_dir="/home/usuario/Imágenes/noexif"
# find images
find $original_pic_dir -type f -iname '*.jpg' >> piclist
while read line
do
# test for exif
if [ -z `exif -t DateTimeOriginal "$line"` >/dev/null 2>&1 ] ; then
# no exif, let's copy it to noexif_dir, but not overwrite existing files
pic_name=`echo "$line" |sed s/" "/_/g | xargs basename`
while [ -f "$noexif_dir/$pic_name" ] ;
do
pic_name=`echo "$pic_name" | sed s/\.jpg/_copy\.jpg/`
done
if [ ! -d $noexif_dir ] ; then
mkdir -p $noexif_dir
fi
mv "$line" "$noexif_dir/$pic_name"
else
# has exif, let's rename and copy to exif/YYYY folder
exif -t DateTimeOriginal "$line" |grep Value > exif.$$
year=`cut -b 10-13 "exif.$$"`
month=`cut -b 15-16 "exif.$$"`
day=`cut -b 18-19 "exif.$$"`
hour=`cut -b 21-22 "exif.$$"`
minute=`cut -b 24-25 "exif.$$"`
second=`cut -b 27-28 "exif.$$"`
rm exif.$$
exif_name="$year-$month-$day-$hour-$minute-$second.jpg"
while [ -f "$cp_dir/$year_$month_$day/$exif_name" ] ;
do
exif_name=`echo $exif_name | sed s/\.jpg/_copy\.jpg/`
done
if [ ! -d "$cp_dir/$year-$month-$day" ] ; then
mkdir -p "$cp_dir/$year-$month-$day"
fi
mv "$line" "$cp_dir/$year-$month-$day/$exif_name"
fi
done < piclist
rm -f piclist
rm -r $temp_dir
Tengo un pequeño problema, tal como esta el script me crea un directorio en Imagenes del tipo "2009-12-25", pero si quiero ponerlo del tipo "2009_12_25" no me deja, he probado editarlo de esta manera:
mkdir -p "$cp_dir/$year_$month_$day"Pero esto me crea un direcorio solo con la variable "$day".
Muchas gracias y hasta pronto.
debes escapar el guión bajo, sería $var1\_$var2\_var3...
Gracias por contestar, he puesto como indicas:
mkdir -p "$cp_dir/$year\_$month\_$day"Y me creo un directorio "2009\_12\_25", no quiero las barras en diagonal.
Seguire buscando, gracias y saludos.
Gracias por contestar, he puesto como indicas:
mkdir -p "$cp_dir/$year\_$month\_$day"Y me creo un directorio "2009\_12\_25", no quiero las barras en diagonal.
Tampoco las comillas, tal como el ejemplo de arriba.
mkdir -p $var1/$var2\_$var3....