martes, 9 de octubre de 2007

pasar Todas las fotos al linux

Pasar una foto es fácil. Pasarlas todas depende del S.O.
En windows cada fabricante tiene su programita.
En linux, no hay nada para mi N70 ( o no lo he encontrado).

El siguiente tostón explica en palabras lo que hace el script que se encuentra más abajo. Si te aburres salta esto y aprovecha el tiempo ;)

A continuación un script que genera otro script con los comandos / órdenes para descargarse las fotos.
El motivo, es que he notado que si durante la "recogida de datos" hacía la llamada correspondiente para que recibir las fotos el programa no funcionaba, pero misteriosamente, si se ejecuta los comandos de recogida por separado la cosa funciona bien.

Las imagenes se alojan en E:\Images y en E:\Images\xxxxx\ en un N70 (xxxxx son carpetas formadas po el año seguido del mes). Esto puede cambiar en otro modelo, así que ojo durante el Copy Paste.

En el linux, colocaremos las imágenes en la carpeta $HOME/Fotos y mantendremos la misma jerarquía de imágenes y directorios que existe en el móvil.

También, y esto es lo más interesante, vamos a crear una base de datos donde se guardará la fecha de modificación de la imagen, así sólo nos descargaremos las imágenes nuevas cada vez que ejecutemos, o mejor dicho, sólo incluiremos en las llamadas de recogida de imágenes aquellas que sean nuevas y/o modificadas.

Como se ha dicho anteriormente, el siguiente script generará otro (prova.sh) que deberemos ejecutar para recoger las imágenes.

El script se basa en el uso del programa obexftp. Por supuesto, para más información está el google.

NOTA 1: Mis programas no son perfectos, y seguro que se pueden optimizar.
NOTA 2: La mac del bluetooth de mi movil es 00:17:4B:44:44:04 Se puede obtener con el comando:
$hcitool scan
NOTA 3: La Base de datos se guarda en el directorio $HOME/Fotos con el nombre "BD"
NOTA 4: El script "GENERADOR" y el "GENERADO" (prova.sh) debe tener permisos de ejecución. Esto se consigue con el comando $chmod u+x .

NOTA 5: IMPORTANTE por si el móvil no es un N70.
El archivo que se recibe con la opción -l (guión ele) del obexftp puede ser diferente
en cada móvil, así por ejemplo, una línea podría ser la siguiente:

file name="20072007916-001.jpg" size="331109" modified="20070803T110456Z" perm="RWD"

La forma de obtener los datos es con el awk y se usa como separador las comillas, así que el nombre se encuentra en la posición $2 y la fecha de modificación es lo que esta en amarillo (posición $6). Ojo por si el orden cambia, también por si el nombre del fichero no empieza con (file o la carpeta con (folder...

SCRIPT

#!/bin/bash


# $# número de parámetros
# $? resultado de la última operación
dirBD=${HOME}/Fotos/BD
touch $dirBD
IFS='
'
echo "#!/bin/bash" > prova.sh
echo "" >> prova.sh
echo "echo ASEGURANDO ESTRUCTURA DIRECTORIO BASE..." >> prova.sh
echo "mkdir ${HOME}/Fotos 2>/dev/null" >> prova.sh
echo "cd ${HOME}/Fotos" >> prova.sh
echo "echo ...Ok" >> prova.sh
echo "" >> prova.sh

function get_onlyfiles(){
sleep 1
#Parametro de la funcion $1
#capturamos sus archivos
lista=' '
for j in `obexftp -b 00:17:4B:44:42:04 -B 12 -c E:/Images/${1} -l`
do
name2=`echo $j | grep file`
if [ $? -eq 0 ]
then
#comprobar si el fichero no esta o ha sido modificado contra la BD
tupla1=`echo $j | awk 'BEGIN {FS="\""}{print $2 " "$6}'`
echo TEST GREP ${1}/$tupla1
cat $dirBD | grep ${1}/$tupla1
if [ $? -eq 1 ]
then
echo ${1}/$tupla1 >> $dirBD
nuevo=`echo $j | awk 'BEGIN {FS="\""}{print $2}'`
lista=$(echo $lista \"${nuevo}\")
fi
fi
done
if [ $lista != ' ' ]
then
echo ... Ficheros recogidos.
echo "#CARPETA e:Images/${1}" >> prova.sh
echo "mkdir ${HOME}/Fotos/$1 2>/dev/null" >> prova.sh
echo "cd ${HOME}/Fotos/$1" >> prova.sh
echo "obexftp -b 00:17:4B:44:42:04 -B 12 -c E:/Images/${1} -g $lista" >> prova.sh
echo "cd .." >> prova.sh
fi
}

lista0=' '
for i in `obexftp -b 00:17:4B:44:42:04 -B 12 -c E:/Images -l`;
do
folder=`echo $i | grep "<folder "`
if [ $? -eq 0 ]
then
folder=`echo $i | grep "<folder " | awk 'BEGIN {FS="\""}{print $2}'`
get_onlyfiles $folder
fi

name=`echo $i | grep file`
#GREP FILE && GReP JPG || GIF <--- PARA EVITAR LOS VIDEOS
if [ $? -eq 0 ]
then
#comprobar si el fichero no esta o ha sido modificado contra la BD
tupla0=`echo $i |awk 'BEGIN {FS="\""}{print $2 " "$6}'`
echo TUPLA0 $tupla0
echo CAT DIRDB
cat $dirBD
echo GREP:
echo $i | cat $dirBD | grep $tupla0
if [ $? -eq 1 ]
then
echo DENTRO IF
echo $tupla0 >> $dirBD
name=`echo $i | awk 'BEGIN {FS="\""}{print $2}'`
lista0=$(echo $lista0 \"${name}\")
fi

fi
done
if [ $lista0 != ' ' ]
then
echo "" >> prova.sh
echo "#CARPETA e:Images/" >> prova.sh
echo "cd ${HOME}/Fotos/" >> prova.sh
echo "obexftp -b 00:17:4B:44:42:04 -B 12 -c E:/Images/ -g $lista0" >> prova.sh
fi
echo "echo FIN"
echo FIN: AHORA EJECUTA prova.sh para empezar la recogida

No hay comentarios: