#51 Le 21/12/2007, à 14:23
- freebird
Re : Script bash - Importer automatiquement les photos d'un appareil
Je suis en train de modifier beaucoup de choses sur le script actuel :
- découpage du code en fonctions indépendantes et épuration du code
- réorganisation de l'enchaà®nement
- ajout d'un aperçu d'une photo pour les commentaires sur les dossiers (si j'y arrive )
- finalisation de la gestion du fichier de configuration
- correction de quelques bugs relevés ci-dessus et lors de mes tests.
Donc ne t'appuie pas trop sur l'existant pour faire ta partie sinon il faudra tout revoir après. Je te propose de faire des fonctions dédiées à ce que tu fais et indépendante du reste et qu'elle travaille dans le répertoire d'import avant le tri éventuel. Qu'en penses-tu et est-ce que ça colle avec ce que tu veux faire ?
Dernière modification par freebird (Le 21/12/2007, à 22:33)
Hors ligne
#52 Le 21/12/2007, à 22:49
- yurek
Re : Script bash - Importer automatiquement les photos d'un appareil
peut on évité d'utiliser pmount ? ya plein de mount sous ubuntu , pourquoi ne pas les utiliser? LE BORDEL dans ce fil tous le monde propose une version . NON il faudrai que le premier fil affiche le code stable. le reste c'est des tests, bug etc...
Dernière modification par yurek (Le 01/08/2008, à 22:00)
http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros
Hors ligne
#53 Le 26/12/2007, à 10:04
- rereleputois
Re : Script bash - Importer automatiquement les photos d'un appareil
Je suis en train de modifier beaucoup de choses sur le script actuel :
- découpage du code en fonctions indépendantes et épuration du code
- réorganisation de l'enchaà®nement
- ajout d'un aperçu d'une photo pour les commentaires sur les dossiers (si j'y arrive )
- finalisation de la gestion du fichier de configuration
- correction de quelques bugs relevés ci-dessus et lors de mes tests.
Ohoh, super freebird !
Ca devrait être chouette au final (deja qu'a la base , c'etait pas mal ). J'ai regardé de plus pret le fonctionnement du script et effectivement, tout est prevu (CD, apn ...) mais ce n'est pas tres "intuitif", content de voir que ça va changer .
Sinon, j'ai aussi regardé F-spot (merci jahwork) et l'import se fait effectivement en creant un repertoire par année puis dans l'année en mois et enfin en jour. Ca me parrait vraiment bien comme type de classement pour des recherches ulterieures.
Dans mon idée, les commentaires devraient se trouver dans les donnees IPTC comme ça ils "suivent" l'image au cours de sa vie. Et en plus ca permettrait de creer un script qui pourrait retrouver ces photos en triant parmis les infos IPTC. (du genre JBrout)
A bientà´t
Regis
Quand on pense qu'il suffirait qu'on ne l'achete pas pour pas que ca se vende ! ... et ben voui, c'est aussi simple que ça
Hors ligne
#54 Le 26/12/2007, à 18:20
- pinguy
Re : Script bash - Importer automatiquement les photos d'un appareil
salut les loulous !
je vous livre la version originale que j'ai retouché pour mes besoins et qui nécessite l'installation du paquet jhead.
Je sais que ça part dans tous les sens et que chacun propose sa version mais c'est peut être pas plus mal comme ça car ça servira bien à quelqu'un pour synthetiser ça dans un script unique. Cette version fonctionne bien chez moi et je n'en demande pas plus.
#!/bin/bash
###################################################################
# Ce script permet d'extraire les photos de l'appareil vers un
# répertoire de traitement et de les renommer éventuellement
#
# Dans ce répertoire, 2 sous répertoires sont crées 800x600 et
# 600x800.
# Ces 2 répertoires contiennent les photos importées redimensionnées
# en fonction de leur orientation (paysage ou portrait).
#
# Nécessite l'installation de pmount pour démonter l'appareil et de
# jhead pour le renommage des photos.
# Script initial réalisé par Gio - http://blog.gioo.info - licence GPL
# Version 0.4 - 10 septembre 2007 -
#
# ajout par Arnaud des fonctions :
#
# -REDIMENSIONNER
# -RENOMMER
# pour ses besoins propres le 21/12/07
###################################################################
#########################
# CONFIGURATION #
#########################
## APPAREIL PHOTO ##
# Répertoire de l'appareil o๠sont stockées les photos
rep_app="/media/usbdisk/DCIM/101_PANA/*"
# Point de montage de l'appareil
app="/media/usbdisk/"
## Rà‰PERTOIRES PHOTOS ##
# Répertoire sur l'ordinateur o๠les photos doivent être extraites
rep="/home/$USER/PHOTOS/"
FormatPaysage="/home/$USER/PHOTOS/FormatPaysage/"
FormatPortrait="/home/$USER/PHOTOS/FormatPortrait/"
#########################
# FONCTIONS #
#########################
## EXTRAIRE ##
# Fonction permettant d'extraire les photos de l'appareil vers le répertoire configuré
function extraire {
if [ $(ls $rep_app | wc -l) -eq "0" ] # Si le résultat d'un ls du répertoire de l'APN compte un nombre de ligne = 0
then
zenity --error --text="Il n'y a pas de photos dans l'appareil." --title="Erreur"
exit
fi
echo "$ACTION" | grep "Conserver les photos sur l'appareil." >/dev/null
if [ "$?" = 0 ] ;
then
# On copie récurcivement tout le contenu de l'appareil
cp -vr $rep_app "$rep" | zenity --progress --text="Veuillez patienter,\nImportation des photos en cours..." --pulsate --auto-close
else
# On déplace tout le contenu de l'appareil
mv -v $rep_app "$rep" | zenity --progress --text="Importation des photos en cours..." --pulsate --auto-close
fi
if [ "${PIPESTATUS[0]}" != "0" ]; then
zenity --error --text="Une erreur est survenue lors de l'importation des photos de l'appareil." --title="Erreur"
exit
fi
zenity --info --text="Les photos ont bien étés importées." --title="Informations"
}
## RENOMMER ##
function renommer {
echo "$ACTION" | grep "Renommer les photos." >/dev/null
if [ "$?" = 0 ] ;
then
if [ $(ls $rep | wc -l) -eq "0" ]
then
zenity --error --text="Il n'y a pas de photos à renommer." --title="Erreur"
exit
fi
for r in `find $rep -iname "*.jpg"`; # Pour chaque occurence de *.JPG ou *.jpg dans le répertoire de traitement
do
# Renommage en utilisant le paquet jhead en jjmmaaaa-hhmmss.jpg (man jhead pour les options)
jhead -nf%d%m%Y-%H%M%S $r
done
fi
zenity --info --text="Les photos ont bien étés renommées." --title="Informations"
}
## REDIMENSIONNER ##
# Fonction permettant de redimensionner les photos extraites dans 2 sous-répertoires
# en fonction de leur format (portrait ou paysage).
function redimensionner {
echo "$ACTION" | grep "Redimensionner les photos." >/dev/null
if [ "$?" = 0 ] ;
then
for photos in `find $rep -iname "*.jpg"` ; # pour chaque fichier jpg selectionné
do
orientation=`identify -format "%[EXIF:Orientation]" "$photos"` # orientation photo (ex: 1 pour paysage 6 ou 8 pour portrait)
if [ $orientation -gt 1 ]
then cp -v $photos "$FormatPortrait"
else
cp -v $photos "$FormatPaysage"
fi
done
for portrait in `find $FormatPortrait -iname "*.jpg"`; # pour chaque fichier jpg selectionné
do
`mogrify -geometry 800x600 $portrait "$FormatPortrait"`
done
for paysage in `find $FormatPaysage -iname "*.jpg"`; # pour chaque fichier jpg selectionné
do
`mogrify -geometry 800x600 $paysage "$FormatPaysage"`
done
fi
zenity --info --text="Les photos ont bien étés redimensionnées." --title="Informations"
}
## ANNULER ##
#Permet de quitter le script en cas d'annulation
function annuler {
if [ "${PIPESTATUS[0]}" != "0" ]; then
exit
fi
}
## ACTIONS ##
#Permet d'éxécuter les actions choisies après l'extraction
function actions {
## IMPORTATION ##
extraire
## RENOMMER ##
renommer
## REDIMENSIONNER ##
redimensionner
## DECONNEXION ##
echo "$ACTION" | grep "Déconnecter l'appareil afin de le débrancher en toute sécurité." >/dev/null
if [ "$?" = 0 ] ; then
deconnecter
fi
}
## DECONNECTER ##
#Déconnecte l'appareil photo
function deconnecter {
eject -v $app | zenity --progress --text="Veuillez patienter,\nDéconnexion de l'appareil en cours..." --pulsate --auto-close
if [ "${PIPESTATUS[0]}" != "0" ]; then
zenity --error --text="Une erreur est survenue lors de la déconnexion de l'appareil." --title="Erreur"
exit
fi
zenity --info --text="Vous pouvez maintenant débrancher l'appareil en toute sécurité." --title="Informations"
}
##########################
# DEBUT DU PROGRAMME #
##########################
## Affichage de la liste des actions
ACTION=$(zenity --list --checklist --width=520 --height=280 \
--title "Sélection des opérations à effectuer" \
--text="Cliquer sur Valider pour lancer l'importation des photos.\n\n Sélectionnez les opérations à effectuer : " \
--column="à€ faire ?" --column="Description" \
TRUE "Redimensionner les photos." \
TRUE "Renommer les photos." \
FALSE "Conserver les photos sur l'appareil." \
TRUE "Déconnecter l'appareil afin de le débrancher en toute sécurité." );
annuler
## Exécution des opérations demandées
actions
Dernière modification par pinguy (Le 26/12/2007, à 23:46)
Hors ligne
#55 Le 10/03/2008, à 17:59
- Aurel07
Re : Script bash - Importer automatiquement les photos d'un appareil
Salut !
Je deterre ce post pour y aller de ma contribution. J'ai fait mon petit script adapté a mes besoins a partir de vos scripts.
Voila ce qu'il fait de particulier :
- interface zenity comme tout le monde
- importe les photos (.jpg ou .cr2) avec gphoto2
- choix du mode de classement a partir des exifs (utilise exiftool)
- modifie les exifs des .cr2 pour y ajouter le LensType. Explication : dans la nouvelle version de DPP (derawtiseur de Canon qui tourne tres bien avec wine), on peut corriger la distortio et les abberations chromatiques si le nom de l'objectif est renseigne dans les exifs. Malheureusement, au temps du 350D ca n'etait pas encore fait et du coup dans le champ exif LensType on a droit a un joli "unknown". Du coup les cr2 du 350D ne peuvent pas profiter de cette fonctionnalite. En modifiant les exifs, maintenant je peux ! Evidemment, il faut l'adapter aux objectifs que l'on possede.
#!/bin/bash
#Auteur : Aurelien Coillet, avec quelques reprises de scripts de Gio, Anraud et Freebird du forum Ubuntu-fr
#Licence GPL
#Version 1 : Importe des photos via PTP ou un repertoire quelconque,
# trie les photos selon la date des exifs avec choix de l'arborescence de tri,
# modifie le LensType des .CR2 (Utile pour un canon 350D pour retoucher la photo avec DPP (wine) (correction de l'objectif accessible))
#
#Necessite : exiftool, zenity, gphoto2
#wishlist : que ca bug pas si il y a deja une image la ou on veut importer ou trier
# avoir le choix entre mois en lettre et mois en chiffre, ajouter d'autres options dans le choix d'arborescence
# aide de zenity : yelp file:///usr/share/gnome/help/zenity/fr/zenity.xml
#
#PS: trop cool, mon premier script utile !!
#############
##Fonctions##
#############
####Copier dans /repbase/annee/mois/jour
function tri {
annee="$(exiftool -CreateDate -d "%Y %B %d" $i | cut -d " " -f24)"
mois="$(exiftool -CreateDate -d "%Y %B %d" $i | cut -d " " -f25)"
jour="$(exiftool -CreateDate -d "%Y %B %d" $i | cut -d " " -f26)"
reptri="$repbase"/$(echo "$Class" | sed s/"année"/"$annee"/ | sed s/"mois"/"$mois"/ | sed s/"jour"/"$jour"/)
if test ! -e $reptri; then
mkdir -p $reptri
fi
mv $i $reptri
}
####Modifier le LensType
function LType {
if [ "$(exiftool -Lens $i | cut -c35-45)" = "18.0 - 55.0" ]; then
exiftool -LensType="Canon EF-S 18-55mm f/3.5-5.6" $i
elif [ "$(exiftool -Lens $i | cut -c35-37)" = "200" ]; then
exiftool -LensType="Canon EF 200mm f/2.8L II" $i
elif [ "$(exiftool -Lens $i | cut -c35-36)" = "50" ]; then
exiftool -LensType="Canon EF 50mm f/1.8" $i
fi
}
####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
}
#############
##Programme##
#############
#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
rep=$(zenity --file-selection --directory --title "Choix du répertoire à importer")
if [ "$rep" = "" ]; then
sortie
fi
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"\
TRUE "Classer les photos"\
TRUE "Insérer le type d'objectif dans les EXIFS des .cr2")
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 de base
repbase=$(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 [ "$repbase" = "" ]; then
sortie
fi
#importation des photos dans un repertoire temporaire
cd $repbase
conserve=$(echo "$action" | grep "Conserver les photos sur l'appareil")
if [ "$conserve" != "" ]; then
if [ $okphoto = 1 ]; then #pas PTP
cp -v "$rep"/*.jpg "$rep"/*.JPG "$rep"/*.cr2 . | zenity --progress --text="Veuillez patienter,\nImportation des photos en cours..." --pulsate --auto-close
else #PTP
gphoto2 --get-all-files 2> /dev/null | zenity --progress --text="Veuillez patienter,\nImportation des photos en cours..." --pulsate --auto-close
fi
else
if [ $okphoto = 1 ]; then #pas PTP
mv -v "$rep"/*.jpg "$rep"/*.JPG "$rep"/*.cr2 . | zenity --progress --text="Veuillez patienter,\nDéplacement des photos en cours..." --pulsate --auto-close
else #PTP
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
#Modifier le LensType
modifltype=$(echo "$action" | grep "Insérer le type d'objectif dans les EXIFS des .cr2")
if [ "$modifltype" != "" ]; then
for i in *.CR2 *.cr2; do LType $i;
done
if [ $? != 0 ]; then
zenity --error --text="Une erreur est survenue lors de la modification du LensType." --title="Erreur"
fi
fi
#Tri
classer=$(echo "$action" | grep "Classer les photos")
if [ "$classer" != "" ]; then
Class=$(zenity --entry \
--title="Classification" \
--text="Entrer l'arborescence de classement (e.g. année/mois/jour/) :")
for i in *.cr2 *.CR2 *.jpg *.JPG; do tri $i;
done
if [ $? != 0 ]; then
zenity --error --text="Une erreur est survenue lors du tri des photos." --title="Erreur"
fi
fi
#Fin du programme
zenity --info --text="Import terminé !"
exit
Et le truc qui est vraiment trop cool, c'est que maintenant je maitrise bien mieux la programmation bash !
Hors ligne
#56 Le 06/05/2008, à 15:16
- LeCaméléon
Re : Script bash - Importer automatiquement les photos d'un appareil
ça marche pour la version 8.04 ?
Hors ligne
#57 Le 07/05/2008, à 01:21
- yurek
Re : Script bash - Importer automatiquement les photos d'un appareil
oui (d'après le code)
http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros
Hors ligne
#58 Le 16/05/2008, à 13:11
- rereleputois
Re : Script bash - Importer automatiquement les photos d'un appareil
Bonjour a tous,
je post ce petit complement d'information. En fait, de mon coté j'ai voulu faire tres simple coté classement et surtout systématique. Alors je vous donne ma methode. Vous pouvez l'utiliser librement, je laissemes droits d'auteurs à la communauté ...:D.
Tenez vous bien ...
Je mets la carte memoire de mon APN dans le lecteur. Elle s'ouvre donc dans mon bureau.
Là, avec Nautilus, je selectionne les photos qui m'interressent (par sujet en general), je clique droit et j'excecute le script suivant :
#!/bin/bash
#script qui renomme ces fichier photo en annéé/mois/jour_"+complement de nommage"
#repertoire de base de stockage des photos
rep="/home/$USER/Desktop/base/"
#recuperation des fichiers selectionnes
fichier=`echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"`
#demande un eventuel complement pour renommer les photos
complement=`zenity --title "information eventuelle" --entry --text "donnez un complement de nommage pour vos photos"`
exiftool '-FileName<CreateDate' -d "%Y-%m-%d_%H:%M:%S_$complement.%%e" $fichier
Mes photos sont maintenant renommees comme suit :
2007-10-20_19:27:05_commentaire.JPG
Apres avoir taité TOUTES les photos, je lance, toujours apres un simlple clique droit, le script suivant :
#!/bin/bash
#script qui DEPLACE TOUS les fichiers photos du repertoire courant dans des repertoire type "repertoire de base"/annee/mois/jour
exiftool '-Directory<CreateDate' -d $rep/%Y/%m/%d .
et voila, c'est fini, j'ai mes photos renommees de maniere systematiques et logiques , classees dans des repertoire par date (genre F-SPOT):cool:
On classe les photos comme on veut, mais lorsqu'on commence a en avoir beaucoup, je pense que c'est une bonne methode pour retrouver ses petits.
A bientôt
Regis
PS : necessite exiftool
PS : les scripts sont a enregistrer dans script-nautilus
PS : allez voir ce site, tres instructif :
http://julien.noel.free.fr/photo_numerique/comment_ranger_ses_photos_numeriques.html
Quand on pense qu'il suffirait qu'on ne l'achete pas pour pas que ca se vende ! ... et ben voui, c'est aussi simple que ça
Hors ligne
#59 Le 01/08/2008, à 20:15
- Aurel07
Re : Script bash - Importer automatiquement les photos d'un appareil
Je remonte ce topic pour vous faire part de mon dernier script d'import et de classement de mes photos. En plus d'importer (via gphoto2, ou par selection dans un dossier), de classer les photos, il change les exifs des fichiers canon pour y mettre le bon objectif, il peut retourner les photos (et modifier l'exif en consequence) et creer un "catalogue". Le catalogue est en fait un dossier contenant des liens vers les photos que vous voulez mettre dans le catalogue. Par exemple, si vous avez fait un voyage de 5 jours au tadjikistan, que vous classez vos photos en ~/photos/annee/mois/jour , vous pouvez creer le catalogue "tadjikistan" et lui dire de creer le catalogue correspondant a ces 5 jours. Il creera un dossier avec des liens vers les photos des 5 jours.
Voila le code :
#!/bin/bash
#Licence GPL
#Version 2 : Refonte du programme, ajout de la creation de catalogue
#
#
#Version 1 : Importe des photos via PTP ou un repertoire quelconque (dont appareil monté en USB mass-storage),
# renomme les photos selon les exifs, avec choix de methode de renommage,
# pivote les photos selon les exifs (avec jpegtran)
# trie les photos selon la date des exifs avec choix de l'arborescence de tri,
# modifie le LensType des .CR2 (Utile pour un canon 350D pour retoucher la photo avec DPP (wine) (correction de l'objectif accessible))
#
#Necessite : exiftool, zenity, gphoto2, jpegtran
#
# aide de zenity : yelp file:///usr/share/gnome/help/zenity/fr/zenity.xml
#
###########
#IMPORTANT#
###########
#choses à modifier selon l'appareil : - les champs exifs dependent de l'appareil photo. il est preferable de les verifier, particulierement le champ de modele de l'appareil (selon ce que vous voulez que ca affiche. Pour moi, ca affiche "350D" alors que le champ complet est "Canon EOS 350D DIGITAL").
# - la fonction de changement de lenstype n'est pas utile a tous le monde...
#############
##Fonctions##
#############
####Pivoter selon exifs
function pivot {
orient="$(exiftool -orientation $i | cut -d " " -f24)"
if [ "$orient" = "90" ]; then
jpegtran -rotate 90 -copy all $i > tmp
mv tmp $i
exiftool -orientation="Horizontal (normal)" -overwrite_original $i
elif [ "$orient" = "270" ]; then
jpegtran -rotate 270 -copy all $i > tmp
mv tmp $i
exiftool -orientation="Horizontal (normal)" -overwrite_original $i
fi
}
####Modifier le LensType
function LType {
lens=$(exiftool -Lens $i)
if [ "$(echo $lens | cut -d " " -f3-5)" = "18.0 - 55.0mm" ]; then
exiftool -LensType="Canon EF-S 18-55mm f/3.5-5.6" $i
elif [ "$(echo $lens | cut -d " " -f3)" = "200.0mm" ]; then
exiftool -LensType="Canon EF 200mm f/2.8L II" $i
elif [ "$(echo $lens | cut -d " " -f3)" = "50.0mm" ]; then
exiftool -LensType="Canon EF 50mm f/1.8" $i
fi
}
####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
}
######################
##Début du Programme##
######################
#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
rep=$(zenity --file-selection --directory --title "Choix du répertoire à importer")
if [ "$rep" = "" ]; then
sortie
fi
fi
#choix des actions a effectuer
action=$(zenity --list --checklist\
--width=390 --height=290\
--title "Que faire ?"\
--text "Sélectionner les actions à réaliser, ou annuler"\
--column=" " --column="Description"\
TRUE "Importer les photos"\
FALSE "Supprimer les photos sur l'appareil"\
FALSE "Renommer les photos"\
TRUE "Classer les photos"\
TRUE "Pivoter jpeg selon exifs"\
FALSE "Créer un dossier catalogue"\
TRUE "Insérer le type d'objectif dans les EXIFS des .cr2")
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 de base
repbase=$(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 [ "$repbase" = "" ]; then
sortie
fi
#import des photos dans le repertoire de base
cd $repbase
supprime=$(echo "$action" | grep "Supprimer les photos sur l'appareil")
if [ "$supprime" = "" ]; then
if [ "$okgphoto" = "1" ]; then #pas PTP
cp -v "$rep"/*.jpg "$rep"/*.JPG "$rep"/*.cr2 "$rep"/*.CR2 . | zenity --progress --text="Veuillez patienter,\nImportation des photos en cours..." --pulsate --auto-close
else #PTP
gphoto2 --get-all-files | zenity --progress --text="Veuillez patienter,\nImportation des photos en cours..." --pulsate --auto-close
fi
else
if [ "$okgphoto" = "1" ]; then #pas PTP
mv -v "$rep"/*.jpg "$rep"/*.JPG "$rep"/*.cr2 "$rep"/*.CR2 . | zenity --progress --text="Veuillez patienter,\nDéplacement des photos en cours..." --pulsate --auto-close
else #PTP
gphoto2 --get-all-files | zenity --progress --text="Veuillez patienter,\nImportation des photos en cours..." --pulsate --auto-close
gphoto2 --delete-all-files --recurse | zenity --progress --text="Veuillez patienter,\nSuppression des photos en cours..." --pulsate --auto-close
fi
fi
if [ "$?" != "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
###########################
##Préparation des actions##
###########################
#Modifier le LensType
modifltype=$(echo "$action" | grep "Insérer le type d'objectif dans les EXIFS des .cr2")
#Renommage
renommer=$(echo "$action" | grep "Renommer les photos")
if [ "$renommer" != "" ]; then
zenity --info --text="Dans la prochaine fenêtre, choisir comment renommer les photos. Les données (année, mois, jour, ...) sont extraites des infos exifs de chaque photo.\n\nLes possibilités sont :\n%a : Abréviation du jour (ex : lun)\n%A : jour (ex : lundi)\n%b : Abréviation du mois (ex : Jan)\n%B : Mois\n%d : Jour du mois (ex : 01)\n%H : Heure\n%M : Minutes\n%m : Numéro du mois\n%y : 2 derniers chiffres de l'année (ex : 06)'\n%Y : Année (ex : 2006)\n%P : Modèle de l'appareil' \n\nExemple : taper %P-%H-%M pour des noms type : Modèle-Heure-Minutes"
renom=$(zenity --entry \
--title="Classification" \
--text="Indiquer comment renommer les photos (ex : %P-%H-%M) :"\
--entry-text "%P-%H-%M")
fi
#Pivoter
pivoter=$(echo "$action" | grep "Pivoter jpeg selon exifs")
#Tri
classer=$(echo "$action" | grep "Classer les photos")
if [ "$classer" != "" ]; then
zenity --info --text="Dans la prochaine fenêtre, choisir l'arborescence de classement souhaitée. Les données (année, mois, jour, ...) sont extraites des infos exifs de chaque photo.\n\nLes possibilités sont :\n%a : Abréviation du jour (ex : lun)\n%A : jour (ex : lundi)\n%b : Abréviation du mois (ex : Jan)\n%B : Mois\n%d : Jour du mois (ex : 01)\n%H : Heure\n%m : Numéro du mois\n%y : 2 derniers chiffres de l'année (ex : 06)'\n%Y : Année (ex : 2006)\n%P : Modèle de l'appareil\n\nExemple : taper %Y/%B/%d/ pour des dossiers type dossier/de/base/année/mois/jour/"
Class=$(zenity --entry \
--title="Classification" \
--text="Entrer l'arborescence de classement (e.g. %Y/%B/%d/) :"\
--entry-text "%Y/%B/%d/")
fi
#Catalogue
cata=$(echo "$action" | grep "Créer un dossier catalogue")
if [ "$cata" != "" ]; then
cat=$(zenity --entry \
--title="Catalogue" \
--text="Entrer le nom du catalogue :")
repcat=""$repbase"/"$cat""
imagescat=$(zenity --file-selection --multiple --title="Choix des images a cataloguer" --text="Choisir ici les images qui seront présentes dans le catalogue :")
if test ! -e "$repcat"; then
mkdir -p "$repcat"
fi
else
imagescat=""
fi
#Nombre d'images
njpg=$(ls *.jpg *.JPG | wc -w)
ncr2=$(ls *.CR2 *.cr2 | wc -w)
###########################
####Programme par image####
###########################
ajpg=0
for i in *.jpg *.JPG; do
#variables contenant les differents exifs
exiftime=$(exiftool -CreateDate -d "%a %A %b %B %d %H %m %y %Y %M" $i)
a="$(echo $exiftime | cut -d " " -f4)"
A="$(echo $exiftime | cut -d " " -f5)"
b="$(echo $exiftime | cut -d " " -f6)"
B="$(echo $exiftime | cut -d " " -f7)"
d="$(echo $exiftime | cut -d " " -f8)"
H="$(echo $exiftime | cut -d " " -f9)"
m="$(echo $exiftime | cut -d " " -f10)"
y="$(echo $exiftime | cut -d " " -f11)"
Y="$(echo $exiftime | cut -d " " -f12)"
M="$(echo $exiftime | cut -d " " -f13)"
P="$( exiftool -Model $i | cut -d " " -f21)"
#renommage
if [ "$renommer" != "" ]; then
nom=$(echo "$renom" | sed s/"%a"/"$a"/ | sed s/"%A"/"$A"/ | sed s/"%b"/"$b"/ | sed s/"%B"/"$B"/ | sed s/"%d"/"$d"/ | sed s/"%H"/"$H"/ | sed s/"%m"/"$m"/ | sed s/"%y"/"$y"/ | sed s/"%Y"/"$Y"/ | sed s/"%M"/"$M"/ | sed s/"%P"/"$P"/)-$(echo "$i" | cut -d "_" -f2)
mv $i $nom
i="$nom"
fi
#pivotage
if [ "$pivoter" != "" ]; then
pivot $i;
fi
#classer
if [ "$classer" != "" ]; then
reptri="$repbase"/$(echo "$Class" | sed s/"%a"/"$a"/ | sed s/"%A"/"$A"/ | sed s/"%b"/"$b"/ | sed s/"%B"/"$B"/ | sed s/"%d"/"$d"/ | sed s/"%H"/"$H"/ | sed s/"%m"/"$m"/ | sed s/"%y"/"$y"/ | sed s/"%Y"/"$Y"/ | sed s/"%P"/"$P"/)
if test ! -e $reptri; then
mkdir -p $reptri
fi
mv $i $reptri
else reptri="$repbase"
fi
#cataloguer
if [ "$(echo $imagescat | grep "$i")" != "" ]; then
ln -s "$reptri""$i" "$repcat"/
fi
ajpg=$[$ajpg + 1]
echo $[100*$ajpg/$njpg]
done | zenity --progress --text="Veuillez patienter,\nExecution des actions demandées pour les jpeg..." --auto-close
acr2=0
for i in *.cr2 *.CR2; do
#variables contenant les exifs
exiftime=$(exiftool -CreateDate -d "%a %A %b %B %d %H %m %y %Y %M" $i)
a="$(echo $exiftime | cut -d " " -f4)"
A="$(echo $exiftime | cut -d " " -f5)"
b="$(echo $exiftime | cut -d " " -f6)"
B="$(echo $exiftime | cut -d " " -f7)"
d="$(echo $exiftime | cut -d " " -f8)"
H="$(echo $exiftime | cut -d " " -f9)"
m="$(echo $exiftime | cut -d " " -f10)"
y="$(echo $exiftime | cut -d " " -f11)"
Y="$(echo $exiftime | cut -d " " -f12)"
M="$(echo $exiftime | cut -d " " -f13)"
P="$( exiftool -Model $i | cut -d " " -f21)"
#modifier le lenstype
if [ "$modifltype" != "" ]; then
LType $i;
fi
#renommage
if [ "$renommer" != "" ]; then
nom=$(echo "$renom" | sed s/"%a"/"$a"/ | sed s/"%A"/"$A"/ | sed s/"%b"/"$b"/ | sed s/"%B"/"$B"/ | sed s/"%d"/"$d"/ | sed s/"%H"/"$H"/ | sed s/"%m"/"$m"/ | sed s/"%y"/"$y"/ | sed s/"%Y"/"$Y"/ | sed s/"%M"/"$M"/ | sed s/"%P"/"$P"/)-$(echo "$i" | cut -d "_" -f2)
mv $i $nom
i="$nom"
fi
#classer
if [ "$classer" != "" ]; then
reptri="$repbase"/$(echo "$Class" | sed s/"%a"/"$a"/ | sed s/"%A"/"$A"/ | sed s/"%b"/"$b"/ | sed s/"%B"/"$B"/ | sed s/"%d"/"$d"/ | sed s/"%H"/"$H"/ | sed s/"%m"/"$m"/ | sed s/"%y"/"$y"/ | sed s/"%Y"/"$Y"/ | sed s/"%P"/"$P"/)
if test ! -e $reptri; then
mkdir -p $reptri
fi
mv $i $reptri
else reptri="$repbase"
fi
#cataloguer
if [ "$(echo $imagescat | grep "$i")" != "" ]; then
ln -s "$reptri""$i" "$repcat"/
fi
acr2=$[$acr2 + 1]
echo $[100*$acr2/$ncr2]
done | zenity --progress --text="Veuillez patienter,\nExecution des actions demandées pour les cr2..." --auto-close
#Fin du programme
zenity --info --text="Import terminé !"
exit
PS : Et oui ca marche avec Hardy
Dernière modification par Aurel07 (Le 01/08/2008, à 20:16)
Hors ligne
#60 Le 02/08/2008, à 08:28
- masterlolo
Re : Script bash - Importer automatiquement les photos d'un appareil
Je n'ai pas encore testé ton script mais pour les dépendances, tu pourrais rajouter ceci dans le code :
# Necessite :
# exiftool => paquet "libimage-exiftool-perl"
# zenity => paquet "zenity"
# gphoto2 => paquet "gphoto2"
# jpegtran => paquet "libjpeg-progs"
#
# Vérification des dépendances
DEPENDANCE="libimage-exiftool-perl zenity gphoto2 libjpeg-progs"
for i in $DEPENDANCE
do
test=`dpkg -s $i 2>/dev/null | grep "Status:"`
if ! [ "${test}" = "Status: install ok installed" ]; then
if ! [ -z "${REQUIS}" ]; then
REQUIS="$REQUIS $i"
else
REQUIS="$i"
fi
fi
done
if ! [ -z "${REQUIS}" ]; then
test=`echo ${REQUIS} | grep zenity`
if [ -z "${test}" ]; then
# Si le paquet zenity est present
zenity --error --width=800 \
--title="Dépendances manquantes" \
--text="Certaines dépendances sont manquantes, pour les installer :\n\nsudo apt-get install ${REQUIS}"
exit 0
else
# Sinon sortie sur le terminal
echo "Dépendances manquantes"
echo "Certaines dépendances sont manquantes, pour les installer :\n\nsudo apt-get install ${REQUIS}\n"
exit 0
fi
fi
Hors ligne
#61 Le 17/08/2008, à 13:00
- alefto
Re : Script bash - Importer automatiquement les photos d'un appareil
salut,
ton script me parait tres interessant.
Mais moi newbee avoir du mal a parler langue a vous...
serait il possible de transformer ca en paquet avec un nom... un logiciel quoi !
que l'on pourait télécharger et installer avec ce viel outil qu'affectionnent encore les ex-windoziens dont la mutation se fait progressivement : le mulot
merci les zextraterrestres altruistes
continuez comme ça !
C'est pas parce qu'on est pas paranoïaque qu'on est pas suivi ...
Hors ligne
#62 Le 11/09/2008, à 12:22
- Aurel07
Re : Script bash - Importer automatiquement les photos d'un appareil
@masterlolo : En effet, avec la verif des dependances, c'est mieux.
@aleftto : Pour utiliser ce script, c'est pas complique : tu copies le texte de mon post (la partie dans "code") et tu le colles dans un nouveau document texte. Tu enregistres ce fichier avec un nom type "importphotos.sh" (ne pas oublier le .sh), fichier que tu rends executable en cliquant bouton droit dessus puis proprietes et dans l'onglet "permissions", tu coches "Autoriser l'execution". Ensuite, pour lancer le programme il te suffiras de faire un double clique dessus. Neanmoins, ce n'est pas un logiciel de programmeur, donc il y'a pas mal de chance pour que ca bug, et donc il est preferable de le lancer a partir de la console pour voir la ou ca coince, si ca coince.
Je rappelle au passage que pour que mon script marche, il faut posseder un canon (qui fait soit des cr2, soit des jpg).
Et si ca marche, ce que tu peux faire, c'est lancer automatiquement le script lorsque tu connectes l'appareil. Pour cela, il suffit d'aller dans le menu Systeme-> Preferences-> Peripheriques et medias amovibles puis dans la partie "appareil photo", rentrer le chemin du script ("/home/toto/mes_scripts/importphoto.sh" par exemple). Voila !
Hors ligne
#63 Le 11/09/2008, à 12:34
- alefto
Re : Script bash - Importer automatiquement les photos d'un appareil
merci
C'est pas parce qu'on est pas paranoïaque qu'on est pas suivi ...
Hors ligne