#!/bin/sh # Auteur : Xavier Correyeur sur la base de scripts de Aurélien Coillet, Gio, Anraud et Freebird du forum Ubuntu-fr # Licence GPL # Version 1 : Importe des photos via PTP ou un repertoire quelconque en les triant par date de création # Necessite : exiftime, zenity, gphoto2 # VEUILLEZ SVP PERSONNALISER LES VARIABLES CI-DESSOUS SELON VOS BESOINS # Extension principale à importer (case-sensitive) EXT1="JPG" # Extension fichier jumeau (RAW) à importer dans le même répertoire que le fichier.EXT1 (case-sensitive) EXT2="CR2" # Noms des répertoires d'import REPIMPORT_PERSO="photo_import" REPIMPORT_GPHOTO2="gphoto2_import" # FONCTIONS # Fonction de copie des fichiers dans un répertoire tampon en les triant par date function copie { for i in `find "$repsrc" -iname *.$EXT1`; do repimport=`exiftime -tc "$i" | sed "s/Image Created//g" | sed "s/ //g" | sed "s/://g"` repimport=`expr substr "$repimport" 1 8` if [ ! -d "$repcible/$reptmp/$repimport" ]; then echo ">> Création du répertoire $repcible/$reptmp/$repimport" mkdir "$repcible/$reptmp/$repimport" fi if [ "$conserve" != "" ]; then CMD="cp -p" else CMD="mv" fi $CMD -v "$i" "$repcible/$reptmp/$repimport" if [ -n $EXT2 ]; then filename="`echo $i | cut -f1 -d '.'`.$EXT2" if [ -f "$filename" ]; then $CMD -v "$filename" "$repcible/$reptmp/$repimport" fi fi done } # PROGRAMME while getopts 's:d:' name ## les options acceptant un paramètres sont suivies de ":" do case $name in s) srcflag=1 repsrc="$OPTARG" echo "La source a été définie" ;; d) destflag=1 repcible="$OPTARG" echo "La cible a été définie" ;; ?) printf "Usage: %s: [-s répertoire source] [-d répertoire destination]\n" $0 exit 2 ;; esac done shift $(($OPTIND -1)) printf "Arguments restants : %s\n" "$*" # choix du répertoire source if [ ! -d "$repsrc" ]; then #detection de l'appareil photo : gphoto2 => si il y a quelque chose, proposer de prendre l'appareil photo detecte et alors -> action. if [ "$(gphoto2 --auto-detect | wc -l)" -ge 3 ]; then apn="$(gphoto2 --auto-detect)" zenity --question --text="Utiliser l'appareil détecté ? \n\n$apn" --title="Détection automatique" okgphoto=$? else okgphoto=1 fi # Si pas d'appareil detecté ou annulation, choisir un repertoire avec zenity --file-selection --directory contenant des photos (ou alors selectionner les photos), puis action if [ $okgphoto -eq 1 ]; then reptmp="${REPIMPORT_PERSO}" repsrc=$(zenity --file-selection --directory --title "Choix du répertoire à importer") if [ ! -d "$repsrc" ]; then zenity --warning --text="Répertoire source non spécifié ou inexistant, \nArrêt du script" exit fi else reptmp="${REPIMPORT_GPHOTO2}" fi else # initialisation du flag okgphoto utilisé ensuite okgphoto=1 reptmp="${REPIMPORT_PERSO}" fi # choix des actions a effectuer action=$(zenity --list --checklist\ --width=390 --height=215\ --title "Que faire ?"\ --text "Sélectionner les actions à réaliser, ou annuler."\ --column=" " --column="Description"\ TRUE "Importer les photos"\ TRUE "Conserver les photos sur l'appareil") import=$(echo "$action" | grep "Importer les photos") if [ -z "$action" ]; then zenity --warning --text="Rien à faire, \nJe ne peux pas continuer, arrêt du script" exit elif [ -z "$import" ]; then zenity --warning --text="Pas d'import demandé, arrêt du script" exit fi # choix du repertoire cible if [ ! -d "$repcible" ]; then repcible=$(zenity --file-selection --directory --title "Choix du répertoire cible" --text "Choisir ici le répertoire de base où seront copiées les photos :") if [ ! -d "$repcible" ]; then zenity --warning --text="Répertoire cible non spécifié ou inexistant, \nArrêt du script" exit fi fi # import des photos dans un repertoire temporaire conserve=$(echo "$action" | grep "Conserver les photos sur l'appareil") if [ ! -d "$repcible/$reptmp" ]; then mkdir "$repcible/$reptmp" fi if [ $okgphoto -eq 1 ]; then #pas PTP copie | zenity --progress --text="Veuillez patienter,\nImport des photos (JPG + RAW) en cours..." --pulsate --auto-close else #PTP cd "$repcible/$reptmp" gphoto2 --get-all-files 2> /dev/null | zenity --progress --text="Veuillez patienter,\nImport des photos en cours par gphoto2..." --pulsate --auto-close if [ -z "$conserve" ]; then if [ "${PIPESTATUS[0]}" != "0" ]; then gphoto2 --delete-all-files --recurse 2> /dev/null | zenity --progress --text="Veuillez patienter,\nSuppression des photos en cours par gphoto2..." --pulsate --auto-close fi fi fi if [ "${PIPESTATUS[0]}" != "0" ]; then zenity --error --text="Une erreur est survenue lors de l'importation des photos de l'appareil.\nArrêt du script." --title="Erreur" exit fi # Fin du programme zenity --info --text="Import terminé !" exit