16 juin 2006

Scripts pour ranger les photos

Category: Geek — Fabien @ 20:11

Bon, c’est pas tout d’avoir un appareil photo numérique, mais de temps en temps, faut bien les mettre sur disque dur pour faire de la place sur la carte.
Pis après, faut s’y retrouver facilement.
Alors, j’ai écrit deux scripts (en fait, trois).
Le premier recopie « intelligemment » les photos de la carte sur le disque dur (c’est à dire qu’il ne transfère que ce qui est plus récent sur le carte que sur le disque :

#!/bin/sh
rsync -u /media/sdd1/DCIM/101_PANA/* /home/commun/Images/PhotosNumeriques/temporaire

Celui là est assez trivial.
L’autre va extraire les informations EXIF des fichiers pour connaitre la date de prise de vue (avec imagemagick), va déplacer le fichier dans la structure arborescente année/mois/jour, en préfixant le nom du fichier de annéemoisjour, et en créant un lien symbolique de ce fichier vers le fichier originel (pour éviter que l’opération de synchro ne recopie le fichier). L’idée, c’est que, souvent, des photos prises le même jour se retrouvent ensemble lorsqu’elles sont classées.
Le script :

#!/bin/bash
identify -format "%[EXIF:DateTime]" $1 | sed -r -e "s/.*([0-9]{4}):([0-9]{2}):([0-9]{2}).*/\1\n\2\n\3/g" > $1.info
annee=`sed -n 1p $1.info`
mois=`sed -n 2p $1.info`
jour=`sed -n 3p $1.info`
rm $1.info
commencePar=`echo $1 | grep $annee$mois$jour\.`
if [ -z $commencePar ]; then
if [ ! -r $annee ]; then
mkdir $annee
fi
if [ ! -r $annee/$mois ]; then
mkdir $annee/$mois
fi
if [ ! -r $annee/$mois/$jour ]; then
mkdir $annee/$mois/$jour
fi
echo $1 > filename.txt
fichier=`sed -r -e 's/.*\/(.*)/\1/g' filename.txt`
chemin=`sed -r -e 's/(.*)\/.*/\1/g' filename.txt`
rm filename.txt
mv $1 $chemin/$annee/$mois/$jour/$annee$mois$jour.$fichier
ln -s $chemin/$annee/$mois/$jour/$annee$mois$jour.$fichier $1
fi

et son cousin qui l’appelle :

#!/bin/sh
find . -maxdepth 1 -name 'P*' -type f -exec rename.sh {} \; -print

Pas de commentaire »

No comments yet.

RSS feed for comments on this post. | TrackBack URI

Leave a comment

XHTML ( You can use these tags):
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> .