Depuis longtemps j’adore prendre des photos, par le passé avec un appareil argentique (Chinon CE4S) et maintenant avec un numérique (Pentax K10). 
L’usage de ces appareils photos numérique génère beaucoup de fichiers et il parfois difficile de les classer correctement.

Dans ce billet, je vous présente la méthode que j’ai retenu pour classer mes photos et le script qui me permet d’importer et nommer les fichiers depuis un support quelconque.
Ce n’est peut être pas la meilleure des méthodes, mais elle semble utilisée par beaucoup de photographes amateurs.

Depuis que j’utilise GNU/Linux, j’ai adopté pour le nommage des photos la règle suivante : AAAAMMJJ_HHmmss.jpg, ce qui signifie :

  • AAAA : l’année
  • MM : le numéro du mois
  • JJ : la date
  • hh : l’heure
  • mm : les minutes
  • ss : les secondes

L’ensemble de ces valeurs sont issues des données Exif enregistrées dans le fichier de la photo par l’appareil numérique.
Si je fait donc une photo aujourdhui 28 novembre 2010 à 13 heure et 12 minutes, le nom du fichier sera donc 20101128_131200.jpg.

Cette règle de nommage me permet d’avoir un nom unique pour les photos puisque je ne peux pas prendre 2 photos à la même heure le même jour.
En nommant les fichiers avec l’année en premier, le mois en second et enfin la date du jour, je peux trier mes photos dans l’ordre chronologique ou elles ont été réalisées.

Pour classer les photos, je créé un répertoire par date de prise de vues, ces dossiers ont pour nommage la date de la prise de vue ; la syntaxe utilisée est AAAA-MM-JJ.
Je rajoute généralement un commentaire dans le nom du dossier pour identifier son contenu. Ainsi 2010-11-28_jardin contiendra les photos réalisées dans le jardin le 28 novembre 2010.

Pour faciliter le renommage et le classement des photos, j’ai réalisé un script qui automatise ces actions et qui peut être installés sous forme de Nautilus Script (gestionnaire de fichiers Nautilus du bureau Gnome) ou d’action personnalisée (gestionnaire de fichier Thunar du bureau Xfce).

Mise à jour du script
V0.3 du 11/05/11 : la lecture des données Exif est faite par exiv2 au lieu de jhead, cela permet de lire la date de prise de vue dans les fichiers au format RAW de mon APN Pentax K10 (fichiers ayant l’extension PEF).

Le script import_photo.sh :

    #!/bin/bash
    #
    # import_photo.sh
    # 
    # Script Nautilus d'import de photos 
    #
    # Dependances : zenity jhead exiv2
    # 
    #------------------------------------------------------------
    Auteur="http://saintcarre.dyndns.org/"
    Version="0.1 du 06/10/08"
    Version="0.2 du 19/02/11"   
    # Suppression de l'affichage du nom de la photo
    Version="0.3 du 11/05/11"    
    # Lecture de la date de la photo avec exiv2 au lieu de jhead
    # -> permet de renommer les fichiers RAW (PEF pour mon Pentax K10
    #------------------------------------------------------------
    # Variables
    #RepImages="$HOME/temp/Images" # Destination des photos
    RepImages="$HOME/Images" # Destination des photos
    Titre="Import d'image"
    LigneSeparateur="--------------------"
    Site="http://saintcarre.dyndns.org/" # Site pour publication des photos
    Copyright="Licence : Paternité-Pas d'Utilisation Commerciale-Pas de Modification\nhttp://creativecommons.org/licenses/by-nc-nd/2.0/fr/"

    #------------------------------------------------------------
    function fct_aide ()
    {
      echo "$0"
      echo -e "Importe les images sélectionnées.\nVersion $Version du $Date."
      echo -e "Nous sommes le `date`."
      echo -e ""
      echo -e "Dependances :"
      echo -e "- zenity \n- jhead \n-exiv2"
      echo -e "\nInstallation"
      echo -e "Copier le fichier $0 dans le dossier $HOME/.gnome2/nautilus-script et rendez le exécutable avec la commande chmod 755 $0"
      echo -e "\nPour l'utiliser\nSélectionner plusieurs fichiers images et clic droit > Script > $0 lancera le traitement sur les fichiers sélectionnés."
    }
    #-----------------------------------------------------------------------------
    function fct_lire_date_exif ()
    { # Lecture de la date de creation de la photo
      #DatePhoto=`jhead $1 | grep Date | awk '{print $3}' | sed "s/:/ /g" `
      DatePhoto=`exiv2 $1 | grep timestamp | awk '{print $4}' | sed "s/:/ /g" `
      if [[ "$DatePhoto" == "" ]]
      then
        echo -e "-I-> Il n'y a pas de date de prise de vue dans $1, utilisation de la date du fichier."
        echo -e "-D-> Creation des donnees Exif minimale et initalisation de la date exif a la date du fichier."
        jhead -mkexif -dsft $1
      fi
      #Repertoire ou doivent être enregistrees les photos
      Annee=`echo $DatePhoto |  awk '{print $1}'`
      Mois=`echo $DatePhoto |  awk '{print $2}'`
      Jour=`echo $DatePhoto |  awk '{print $3}'`
      RepDest=`echo "$RepImages/$Annee/$Annee-$Mois-$Jour"`
      if [[ ! -d $RepDest ]]
      then
        echo -e "-I-> Creation du repertoire $RepDest."
        mkdir -p $RepDest
      fi
      #echo "\n-I-> Copie et renommage de $1 "
      echo -e " .\c"
      cp $1 $RepDest/$1
      exiftran -ai $RepDest/$1 # rotation de la photo dans le bon sens
      exiv2 mv $RepDest/$1
      # Insertion des commentaires dans l'image
      # Pas de commentaires insere => autre script a faire
    }
    #-----------------------------------------------------------------------------
    function fct_main ()
    {
      echo -e "\n\n\t $0\n"
      echo -e "Importe les images sélectionnées.\nVersion $Version."
      echo -e "Nous sommes le `date`."
      echo -e "\t $LigneSeparateur"
      # Si aucun parametres => pas d'images à copier
      if [[ "$#" -eq 0 ]]; then
        echo -e "-E-> Il n'y a aucun fichier(s) de sélectionné(s) !\n"
        exit
      fi
      # Controle de l'existance du répertoire de destination
      if [[ ! -d $RepImages ]]
      then
        echo -e "-I-> Creation du repertoire $RepImages."
        mkdir $RepImages
      fi
      while [ $# -gt 0 ]; do
        fct_lire_date_exif "$1"
        shift
      done
      echo -e "\t $LigneSeparateur"
      echo -e "\t RETURN pour fermer la fenetre.\n"

    }
    #-----------------------------------------------------------------------------
    # Programme principal
    fct_main "$@" | zenity --text-info --title "$Titre" --width=700 --height=500

Pour que ce script fonctionne, il faut avoir installé les prérequis :

    apt-get install zenity exiv2 jhead

Pour Ubuntu, il faut précéder la commande de sudo.

Pour que ce script soit accessible depuis le menu du clic droit sous Nautilus, il suffit de le copier dans le dossier $HOME/.gnome2/nautilus_scripts et de le rendre exécutable.