Recent Changes - Search:
HomePage



Materiel


Photo


Système et réseau

 Sous Debian Gnu Linux...

 ... et Ubuntu


Gestion de projet

 ...informatique


Cours


Divers


Private




 edit SideBar



Import

Importer vos photos

<< Shellscripts | Index | Retouche >>


J'ai largement adapté un script trouvé sur le forum Ubuntu pour importer et classer automatiquement les photos d'une carte mémoire ou tout autre APN.

  • il permet de sélectionner via une IHM ou la ligne de commande les répertoires source / cible.
    
    
  • il crée dans le répertoire cible des dossiers correspondant aux dates à laquelle les photos ont été prises (au format yyyymmdd selon les infos EXIF) et y déplace les photos
    
    
    
    
Logiciels utilisés par le script :

  • exiftime
    
    
  • zenity
    
    
  • gphoto2
    
    
    
    
Usage: ./photo_import.sh: [-s répertoire source] [-d répertoire destination]

NB : Si les options -s et / ou -d ne sont pas spécifiées le script demandera à l'utilisateur quel(s) répertoire(s) utiliser.


#!/bin/sh
#Auteur : XCO 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

#############
##Fonctions##
#############


#### Sortie volontaire par le bouton annuler
function sortie {
 zenity --warning --text="Aucun répertoire spécifié, \nJe ne peux pas continuer, arrêt du script"
 exit
}

function copie {
 for i in `find "$repsrc" -iname *.JPG`;
 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 
   #cp -v "$rep"/*.jpg "$rep"/*.JPG "$rep"/*.cr2 . | zenity --progress --text="Veuillez patienter,\nImportation des photos en cours..." --pulsate --auto-close 
   cp -v "$i" "$repcible/$reptmp/$repimport"
  else
   mv -v "$i" "$repcible/$reptmp/$repimport"
   #mv -v "$rep"/*.jpg "$rep"/*.JPG "$rep"/*.cr2 . | zenity --progress --text="Veuillez patienter,\nDéplacement des photos en cours..." --pulsate --auto-close
  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(:nl:)(:include $Group.GroupFooter:)(:nl:)'
 #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 = 1 ]; then
  repsrc=$(zenity --file-selection --directory --title "Choix du répertoire à importer")
 fi
fi

if [ ! -d "$repsrc" ]; then
 sortie
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 [ "$action" = "" ]; then
 sortie
elif [ "$import" = "" ]; then
 zenity --warning --text="Rien à faire, \nJe ne peux pas continuer, 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 :")
fi

if [ ! -d "$repcible" ]; then
 sortie
fi

# import des photos dans un repertoire temporaire
conserve=$(echo "$action" | grep "Conserver les photos sur l'appareil")
reptmp="photo_import"

if [ ! -d "$repcible/$reptmp" ]; then
 mkdir "$repcible/$reptmp"
fi

if [ $okphoto=1 ]; then  #pas PTP
 copie | zenity --progress --text="Veuillez patienter,\nImport des photos en cours..." --pulsate --auto-close
else #PTP
 cd $repbase
 if [ "$conserve" != "" ]; then 
  gphoto2 --get-all-files 2> /dev/null | zenity --progress --text="Veuillez patienter,\nImportation des photos en cours..." --pulsate --auto-close 
 else
  gphoto2 --get-all-files 2> /dev/null | zenity --progress --text="Veuillez patienter,\nImportation des photos en cours..." --pulsate --auto-close
  gphoto2 --delete-all-files --recurse 2> /dev/null | zenity --progress --text="Veuillez patienter,\nSuppression des photos en cours..." --pulsate --auto-close
 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


<< Shellscripts | Index | Retouche >>







Pièces jointes de la catégorie :








Edit - History - Print - Recent Changes - Search
Page last modified on October 21, 2010, at 12:56 AM