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.

Asegúrate de que todas las rutas que usas en el script son absolutas.

Si colocas

cd /home/usuario/Imágenes

Antes de

# Me descarga todas las fotos en el directorio donde ejecuto
gphoto2 --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.

jlazkano escribió:

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....