Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 tongue)
- 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

freebird a écrit :

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 tongue)
- 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 wink). 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 big_smile.
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 smile
- 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 ! big_smile 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 ? roll

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 smile

merci les zextraterrestres altruistes big_smile
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 smile


C'est pas parce qu'on est pas paranoïaque qu'on est pas suivi ...

Hors ligne