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 :
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 >>