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.

#26 Le 09/12/2007, à 01:29

freebird

Re : Script bash - Importer automatiquement les photos d'un appareil

Nouvelle version avec la récupération de la date de création.

#!/bin/bash

###################################################################
# ~ Informations ~
# Ce script permet de copier les photos d'un appareil vers un répertoire.
#
# Nécessite l'installation de pmount pour démonter l'appareil
# Nécessite l'installation du package exiftags pour récupérer la date de création des photos
#
# Script réalisé par Gio - http://blog.gioo.info - licence GPL
# Version 0.4 - 10 septembre 2007
# Modifié par Freebird
# Version 0.6 - 08 décembre 2007
###################################################################

#########################
#     CONFIGURATION     #
#########################
### APPAREIL PHOTO ###
#Répertoire de l'appareil o๠sont stockées les photos
rep_app="/media/DC C800/"
#Point de montage de l'appareil
app="/media/DC C800/"

### Rà‰PERTOIRE PHOTOS ###
#Répertoire sur l'ordinateur o๠les photos doivent être extraites
rep="/home/$USER/Bureau/Photos/"

#########################
#       FONCTIONS       #
#########################
### EXTRAIRE ###
#Fonction permettant d'extraire les photos de l'appareil vers le répertoire configuré
function extraire {
    if [ $(find "${rep_app}" -type f | wc -l) -eq "0" ]
    then
        zenity --error --text="Il n'y a pas de photos dans l'appareil." --title="Erreur"
        exit
    fi

    # Gestion d'un tri automatique par date de prise de vue
    echo "$ACTION" | grep "Classer par date de prise de vue." >/dev/null
    if [ "$?" = 0 ] ; then
        #On créé un répertoire temporaire pour classer par date de création
        tri_date=0
        repcible="${rep}/.tri_date.$$"
    else
        tri_date=1
        
        #On créé un répertoire dans lequel extraire les photos à  la date du jour
        repcible="$(echo "$rep$(date +%d%m%Y)" | cut -d"," -f1)"
    fi

    mkdir -p "$repcible"

    echo "$ACTION" | grep "Conserver les photos sur l'appareil." >/dev/null
    if [ "$?" = 0 ] ; 
    then
        #On copie recurcivement tout le contenu de l'appareil
        find "${rep_app}" -type f -exec cp {} "$repcible" \; | zenity --progress --text="Veuillez patienter,\nImportation des photos en cours..." --pulsate --auto-close
    else
        #On déplace tous le contenu de l'appareil
        find "${rep_app}" -type f -exec mv -v {} "$repcible" \; | 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

    if [ $tri_date = 0 ]
    then
       tri_par_date_creation | zenity --progress --text="Veuillez patienter,\nClassement des photos en cours..." --pulsate --auto-close
    fi
    zenity --info --text="Les photos ont bien étés importées." --title="Informations"
}

### CLASSER PAR DATE ###
#Classe les photos par date de creation
function tri_par_date_creation {
   find "$repcible" -type f | while read image ; do
      #Recuperation de la date de création ou de la date de génération
      date_creat=$(exiftime ${image} | cut -d' ' -f3 | awk -F':' '{ print $3$2$1 }' | head -1)
      mkdir -p ${rep}/${date_creat}
      mv ${image} ${rep}/${date_creat}/
   done
   rmdir "$repcible"
}

### 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
    
    ### 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 à  effectuées" \
        --text="Cliquer sur Valider pour lancer l'importation des photos.\n\nScript réalisé par Gio.\nhttp://blog.gioo.info\n\nSélectionnez les opérations à  effectuer : " \
        --column="à€ faire ?" --column="Description" \
        FALSE   "Classer par date de prise de vue." \
        TRUE    "Conserver les photos sur l'appareil." \
        FALSE   "Déconnecter l'appareil afin de le débrancher en toute sécurité." );

annuler

## Exécution des opérations demandées
actions

J'ai encore 2/3 modifs à  l'esprit comme :
- créer un fichier de conf au premier lancement avec des fenêtres de choix de répertoire pour éviter de stocker en dur les répertoires dans le script
- proposer de choisir entre classement par jour (au format JJMMAAA) ou classement par mois (MMAAAA)
- regarder ce que fait gphoto2
- prendre un café tongue

Ah oui, petit détail. Vous pouvez classer par date de création vos photos qui sont dans n'importe quel répertoire en changeant la valeur de la variable rep_app wink

Hors ligne

#27 Le 09/12/2007, à 16:54

Autiwa

Re : Script bash - Importer automatiquement les photos d'un appareil

j'ai trouvé la solution que je souhaitais. Pour info, celle que j'avais marqué précédement ne marchait pas du tout.
Pour copier les photos sans créer ou copier les répertoires, il suffit de remplacer :

    #On créé un répertoire dans lequel extraire les photos à  la date du jour
    rep="$(echo "$rep$(date)" | cut -d"," -f1)"
    mkdir "$rep"

    echo "$ACTION" | grep "Conserver les photos sur l'appareil." >/dev/null
    if [ "$?" = 0 ] ;
    then
        #On copie recurcivement 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 tous le contenu de l'appareil
        mv -v $rep_app "$rep" | zenity --progress --text="Importation des photos en cours..." --pulsate --auto-close
    fi

par

    echo "$ACTION" | grep "Conserver les photos sur l'appareil." >/dev/null
    if [ "$?" = 0 ] ;
    then
        #On copie recurcivement 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 tous le contenu de l'appareil
        mv -v $rep_app/* "$rep" | zenity --progress --text="Importation des photos en cours..." --pulsate --auto-close
    fi

PS : comme quoi, je me faisais chier pour rien avec mes boucles, pour qu'en plus, le script ne fonctionne carrément pas à  la sortie...


Pensez à éditer le titre du sujet (en éditant le premier message) pour rajouter un "[Résolu]" ça évite à ceux qui veulent donner un coup de main, d'ouvrir un sujet où il n'y a plus d'aide à donner.

Hors ligne

#28 Le 09/12/2007, à 21:02

jahwork

Re : Script bash - Importer automatiquement les photos d'un appareil

Autiwa a écrit :

gphoto2 ne marche pas pour tout les appareils. Pour exemple, mon panasonic n'est pas dans la liste des périphériques reconnus...

Pas encore... wink

On peut toujours avoir les deux :
(pseudo-code)
Si USB-mass-storage type
alors
  ...
Sinon si PTP
alors
...
Sinon



Freebird, merci pour ta mise à jour.
Je créerais plutôt des répertoire style AAAAMMJJ / AAAAMM
comme ça c'est classé dans le répertoire général

En tout cas c'est un bon début.

La prochaine étape c'est de pouvoir configurer le nom des répertoire
directement dans la boite de dialogue :-)

Merci !

Hors ligne

#29 Le 09/12/2007, à 23:51

freebird

Re : Script bash - Importer automatiquement les photos d'un appareil

jahwork a écrit :

Freebird, merci pour ta mise à  jour.
Je créerais plutà´t des répertoire style AAAAMMJJ / AAAAMM
comme ça c'est classé dans le répertoire général

Je suis d'accord avec toi, je préfère comme ça wink
L'idéal serait d'offrir le choix ce qui peut se faire aussi tongue

jahwork a écrit :

La prochaine étape c'est de pouvoir configurer le nom des répertoire
directement dans la boite de dialogue :-)

J'aurai peut-être le temps de regarder ça dans la semaine.

Et de rien :-)

Hors ligne

#30 Le 10/12/2007, à 11:49

jahwork

Re : Script bash - Importer automatiquement les photos d'un appareil

Des idées pour la configuration du nom des répertoires :

la commande date est un bon outil.
En effet on peut formater la sortie avec beaucoup de paramètre avec %
Par défaut il prend la date du moment, mais on peut aussi lui donner une date en entrée ! cool

une exemple est toujours plus clair :
% date -d 20071210 +"[%Y-%m-%d]"
[2007-12-10]

explication :
"-d 20071210" est la date en entrée, donc au format AAAAMMJJ
"+"[%Y-%m-%d]"" est le format de sortie : rtfm de date wink
en sortie je peux mettre ce que je veux pour les info sur l'année, le mois, le jour

autres exemples :
% date -d 20071210 +"[%Y-%b-%d]"
[2007-Dec-10]
% date -d 20071210 +"Ce que je veux %Y-%m-%d et meme plus"
Ce que je veux 2007-12-10 et meme plus

En résumé si on a les infos année, mois, jour, on peut formater en sortie comme on veut !

Implémentation dans le script :
- proposer un champ texte pour personnaliser le nom du répertoire
- donner les paramètres utilisable = un sous-ensemble de la commande date (e.g. : %Y = année sur 4 chiffres, %y année sur 2 chiffres, %m mois en chiffre, etc)
- donner directement cette chaine a la commande date au moment de créer le nom du répertoire

on peut même imaginer un champ %o (seule lettre pas prise dans date) ou l'utilisateur peut rentrer un description du répertoire.
C'est a dire qu'on aura, par exemple, des répertoire avec la date + description par jour.
Exemple de répertoire :
[2007-12-09] anniversaire maman
[2007-12-10] sortie lac

Perso c'est comme ça que je classe mes images : date du jour + description.
à‡a demande bien sur de demander a l'utilisateur une description par jour.

voilou, ya du taf wink

Merciiiiche !

Hors ligne

#31 Le 10/12/2007, à 16:36

freebird

Re : Script bash - Importer automatiquement les photos d'un appareil

Je vais essayer d'apporter les modifications suivantes ce soir :
- intégration de gphoto2 pour gérer tous les appareils reconnus

- conservation d'un mode par point de montage pour gérer les cas o๠l'appareil n'est pas reconnu par gphoto2

- ajout d'une interface permettant de choisir :
-- l'APN auto-détecté par gphoto2
-- ou le point de montage de l'APN
-- ou un répertoire si on ne veut pas utiliser gphoto2

- ajout d'une interface de configuration pour permettre de choisir :
-- le répertoire racine pour la copie des photos
-- le format de la date pour la création des sous-répertoires (utilisation de la fonction date comme suggéré par jahwork)
-- si on veut saisir un commentaire par sous-répertoires créés ou pas

Et pour ceux qui possèdent un APN avec un protocole propriétaire, changez d'APN big_smile

Hors ligne

#32 Le 11/12/2007, à 15:49

freebird

Re : Script bash - Importer automatiquement les photos d'un appareil

Je ne suis pas encore pleinement satisfait du code et de l'enchaà®nement des différentes interfaces mais je vous pose ma dernière mouture pour critique.

En plus des modifications listées ci-dessus qui sont intégrées dans cette version, j'ai commencé à  mettre en place un fichier de configuration pouvant conserver la configuration utilisée la fois précédente (il y a un message de confirmation permettant donc de ne pas la conserver).

Je n'ai fais que des tests unitaires pour l'instant donc il peut y avoir des bugs à  corriger.

#!/bin/bash
###################################################################
# ~ Informations ~
# Ce script permet de copier les photos d'un appareil vers un répertoire.
#
# Nécessite l'installation des packages suivant :
#  - pmount pour démonter l'appareil
#  - exiftags pour récupérer la date de création des photos
#  - gphoto2 pour l'interfaçage avec l'appareil
#
# Script réalisé par Gio - http://blog.gioo.info - licence GPL
# Version 0.4 - 10 septembre 2007
# Modifié par Freebird
# Version 0.6 - 08 décembre 2007
# Modifié par Freebird
# Version 1.0 - 10 décembre 2007
###################################################################

#########################
#       FONCTIONS       #
#########################

###   CONFIGURATION   ###
function config {
cd `dirname $0`
fic_conf="`pwd`/.`basename $0 ".sh"`.conf"
fic_tmp="`pwd`/.`basename $0 ".sh"`.tmp.$$"

# Lecture du fichier de conf
if [ -s ${fic_conf} ]
then
   . ${fic_conf}
fi

if [ "${rep_app}" = "" ] ; then rep_app="/media"; fi
if [ "${REP_STOCKAGE}" = "" ] ; then REP_STOCKAGE=`pwd`; fi
if [ "${FMT_DATE}" = "" ] ; then FMT_DATE="%Y-%m-%d"; fi

# Auto-detection APN
gphoto2 --auto-detect > ${fic_tmp}.auto-detect
if [ `wc -l "${fic_tmp}.auto-detect" | awk '{ print $1 }'` -ge 3 ]
then
   # Au moins 1 APN detecte automatiquement
   lst_apn=`cat ${fic_tmp}.auto-detect`
   zenity --question --text="Utiliser l'appareil détecté ? \n\n$lst_apn" --title="Detection automatique"
   ok_gphoto=$?
else
   ok_gphoto=1
fi
 
# Point montage APN si on n'utilise pas gphoto2
if [ ${ok_gphoto} -eq 1 ]
then
   zenity --title="Confirmation"  --question --text="Utilisation de ${rep_app}."
   if [ $? -ne 0 ]; then
      # récupération de la liste des points de montage dispo en exclant / /var* /dev* /lib*
      lst_montage=$(df -k | awk -F'%' '{ print $2 }' | sed -e 's/^ //' | awk ' NR>3 && $NF !~ "/var" && $NF !~ "/dev" && $NF !~ "/lib" {
         printf(" FALSE \"%s\"",$0) }')
      cmd="zenity --list --radiolist --title \"Selection du point de montage\" --width=520 --height=320 \
               --text=\"Choisir dans la liste\" --column=\"Choix\" --column=\"Point de montage\" ${lst_montage}"
      echo $cmd > ${fic_tmp}.df-k
      chmod 755 ${fic_tmp}.df-k
      rep_app=$(${fic_tmp}.df-k)
      if [ "${rep_app}" = "" ]
      then
         # selection d'un répertoire
         rep_app=$(zenity --title="Sélection d'un répertoire" --file-selection --directory --filename="${rep_app}" 2>/dev/null)
         if [ "${rep_app}" = "" ]
         then
            sortie
         fi
      fi
   fi
fi

# recherche du nombre de photos
if [ ${ok_gphoto} -eq 0 ]; then
   nb_photos=$(gphoto2 --list-files | grep -ve '^There' | wc -l)
else
   nb_photos=$(find "${rep_app}" -type f | wc -l)
fi

### Rà‰PERTOIRE PHOTOS ###
#Répertoire sur l'ordinateur o๠les photos doivent être extraites
zenity --title="Confirmation" --question --text="Stockage dans ${REP_STOCKAGE}."
if [ $? -ne 0 ]; then
   rep=$(zenity --title="Selectionner le répertoire de stockage" --file-selection --directory --filename="${REP_STOCKAGE}" 2>/dev/null)
   if [ "${rep}" = "" ] ; then rep="${REP_STOCKAGE}"; fi
else
   rep="${REP_STOCKAGE}"
fi

# Format de date
while true ; do
   TEXTE="${FMT_DATE} = `date +\"${FMT_DATE}\"`"
   FMT_DATE_SAISIE=$(zenity --title="Format de la date pour le dossier cible" --entry --text="${TEXTE}" --entry-text="${FMT_DATE}")
   if [ "${FMT_DATE_SAISIE}" = "" -o "${FMT_DATE_SAISIE}" = "${FMT_DATE}" ]; then break; fi
   FMT_DATE=${FMT_DATE_SAISIE}
done
}

### EXTRAIRE ###
#Fonction permettant d'extraire les photos de l'appareil vers le répertoire configuré
function extraire {
    # recherche du nombre de photos
    if [ ${ok_gphoto} -eq 0 ]; then
       nb_photos=$(gphoto2 --list-files | grep -ve '^There' | wc -l)
    else
       nb_photos=$(find "${rep_app}" -type f | wc -l)
    fi

    if [ ${nb_photos} -eq "0" ]
    then
        zenity --error --text="Il n'y a pas de photos dans l'appareil." --title="Erreur"
        sortie
    fi

    # Gestion d'un tri automatique par date de prise de vue
    echo "$ACTION" | grep "Classer par date de prise de vue." >/dev/null
    if [ "$?" = 0 ] ; then
        #On créé un répertoire temporaire pour classer par date de création
        tri_date=0
        repcible="${rep}/${fic_tmp}.tri_date"
    else
        tri_date=1
        
        #On créé un répertoire dans lequel extraire les photos à  la date du jour
        ssrep=$(date +"${FMT_DATE}")
        repcible="${rep}/${ssrep}"
        echo "${ssrep}" > ${fic_tmp}.lst_ssrep
    fi

    mkdir -p "$repcible"
    cd "$repcible"

    echo "$ACTION" | grep "Conserver les photos sur l'appareil." >/dev/null
    if [ "$?" = 0 ] ; 
    then
        if [ ${ok_gphoto} -eq 0 ]; then
           gphoto2 --get-all-files 2>/dev/null | zenity --progress --text="Veuillez patienter,\nImportation des photos en cours..." --pulsate --auto-close
        else
           #On copie recurcivement tout le contenu de l'appareil
           find "${rep_app}" -type f -exec cp {} "$repcible" \; | zenity --progress --text="Veuillez patienter,\nImportation des photos en cours..." --pulsate --auto-close
        fi
    else
        if [ ${ok_gphoto} -eq 0 ]; then
           gphoto2 --get-all-files 2>/dev/null | zenity --progress --text="Veuillez patienter,\nImportation des photos en cours..." --pulsate --auto-close
           if [ $? -ne 0 ]; then
              # si l'import n'a pas fonctionné on s'arrête là 
              zenity --error --text="Import des photos en erreur."
              sortie
           fi
           gphoto2 --delete-all-files --recurse 2>/dev/null | zenity --progress --text="Veuillez patienter,\nSuppression des photos en cours..." --pulsate --auto-close
        else
           #On déplace tous le contenu de l'appareil
           find "${rep_app}" -type f -exec mv -v {} "$repcible" \; | zenity --progress --text="Veuillez patienter,\nImportation 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." --title="Erreur"
        sortie
    fi

    # Tri automatique par date de prise de vue
    if [ $tri_date = 0 ]
    then
       tri_par_date_creation | zenity --progress --text="Veuillez patienter,\nClassement des photos en cours..." --pulsate --auto-close
    fi

    # Ajouter un commentaire aux répertoires
    echo "$ACTION" | grep "Ajouter un commentaire aux répertoires." >/dev/null
    if [ "$?" = 0 ] ; 
    then
       cd "${rep}"
       sort -u ${fic_tmp}.lst_ssrep | while read ssrep; do
          nouv_ssrep=$(zenity --title="Commentaire" --entry --text="Ajouter un commentaire à  ${ssrep}" --entry-text="${ssrep}")
          if [ "${nouv_ssrep}" != "" -a "${nouv_ssrep}" != "${ssrep}" ]; then mv "${ssrep}" "${nouv_ssrep}"; fi
       done
    fi

    zenity --info --text="Les photos ont bien étés importées." --title="Informations"
}

### CLASSER PAR DATE ###
#Classe les photos par date de creation
function tri_par_date_creation {
   > ${fic_tmp}.lst_ssrep
   find "$repcible" -type f | while read image ; do
      #Recuperation de la date de création ou de la date de génération
      date_creat=$(exiftime "${image}" | cut -d' ' -f3 | awk -F':' '{ print $1$2$3 }' | head -1)
      if [ "${date_creat}" = "" ]; then
         # si on ne parvient pas à  récupérer de date on prend la date du jour
         ssrep=$(date +"${FMT_DATE}")
      else
         ssrep=$(date -d ${date_creat} +"${FMT_DATE}")
      fi
      mkdir -p "${rep}/${ssrep}"
      echo "${ssrep}" >> ${fic_tmp}.lst_ssrep
      mv "${image}" "${rep}/${ssrep}/"
   done
   rmdir "$repcible"
}

### ANNULER ###
#Permet de quitter le script en cas d'annulation
function annuler {
    if [ "${PIPESTATUS[0]}" != "0" ]; then
        sortie
    fi
}

#Supprime les fichiers temporaires et sort
function sortie {
  rm ${fic_tmp}* 2>/dev/null
  rmdir "$repcible"
  exit
}

#Ecriture de la configuration dans un fichier de conf
function ecrit_conf {
   zenity --question --title="Configuration" --text="Conserver cette configuration ?"
   if [ $? -eq 0 ]; then
      echo "# Fichier de conf de `basename $0`\n" > ${fic_conf}
      echo "REP_STOCKAGE=\"${REP_STOCKAGE}\"" >> ${fic_conf}
      echo "FMT_DATE=\"${FMT_DATE}\"" >> ${fic_conf}
      echo "rep_app=\"${rep_app}\"" >> ${fic_conf}
      echo "export REP_STOCKAGE FMT_DATE rep_app" >> ${fic_conf}
   fi
}

### ACTIONS ###
#Permet d'éxécuter les actions choisies après l'extraction
function actions {
    ###IMPORTATION ###

    extraire
    
    ### 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 "$rep_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"
        sortie
    fi
    zenity --info --text="Vous pouvez maintenant débrancher l'appareil en toute sécurité." --title="Informations"
}


##########################
#   DEBUT DU PROGRAMME   #
##########################
config

## Affichage de la liste des actions
    ACTION=$(zenity --list --checklist --width=520 --height=320 \
        --title "Sélection des opérations à  effectuer" \
        --text="Cliquer sur Valider pour lancer l'importation des photos.\n\nScript réalisé par Gio.\nhttp://blog.gioo.info\n\nSélectionnez les opérations à  effectuer : " \
        --column="à€ faire ?" --column="Description" \
        FALSE   "Classer par date de prise de vue." \
        TRUE    "Conserver les photos sur l'appareil." \
        FALSE   "Déconnecter l'appareil afin de le débrancher en toute sécurité." \
        TRUE    "Ajouter un commentaire aux répertoires." );

annuler

## Exécution des opérations demandées
actions

## On conserve la config pour les prochains lancements
ecrit_conf

sortie

Je poserai quelques screens ce soir pour imager un peu le fonctionnement. L'instabilité du forum aujourd'hui ne m'a pas permis de m'en occuper ce matin donc ça attendra un peu ^^

Edit voici quelques screens des écrans :

Détection automatique avec gphoto2 :
Capture-Detection_automatique.png

Sélection du point de montage si on ne choisi pas détection automatique ou si il n'y a aucun APN de détecté par gphoto2 :
Capture-Selection_montage.png

Sélection d'un répertoire si on n'a pas choisi l'un des 2 précédents :
Capture-Selection_repertoire.png

Validation du répertoire de stockage des photos :
Capture-emplacement.png
puis écran de sélection d'un répertoire si le répertoire ne convient pas.
Capture-Selection_repertoire.png

Choix du format de la date pour le dossier cible :
Capture-Format_date.png

Choix des opérations à  effectuer :
Capture-Selection_operations.png

Saisi des commentaires pour chaque dossier créé :
Capture-Commentaire.png

Dernière modification par freebird (Le 12/12/2007, à 16:36)

Hors ligne

#33 Le 12/12/2007, à 15:29

jahwork

Re : Script bash - Importer automatiquement les photos d'un appareil

wou houuuuuuu
très très fort freebird !

Merci pour cette update + les screens!
Ya plus qu'a tester now.
Maintenant que les APN PTP sont pris en charge...

Une remarque :
la nécessité d'avoir pmount : est-ce vraiment nécessaire ?
De plus la déconnexion de l'appareil n'est valable que pour un APN en USB mass storage, non?
En PTP ce n'est pas nécessaire je pense.

Hors ligne

#34 Le 12/12/2007, à 16:35

freebird

Re : Script bash - Importer automatiquement les photos d'un appareil

jahwork, je suis preneur de retours sur tes tests vu que je n'ai pas d'APN PTP sous la main wink

pmount sert pour l'utilisation de la commande "eject". D'ailleurs ça ne fonctionne pas avec mon APN. Il faut que je regarde smile

Ce que j'ai vu à  faire :
- une faute de grammaire à  corriger dans le titre de l'écran de choix des actions (corrigé dans le message ci-dessus)
- gérer le cas o๠le répertoire existe (lors du classement comme lors du commentaire). Proposer le choix de l'utiliser ou de modifier le nom du répertoire cible
- afficher le nombre de photos à  traiter (vu qu'il est déjà  calculé autant le montrer ^^)
- modifier l'enchaà®nement des écrans, j'ai déjà  une petite idée d'amélioration mais je prendrai compte de vos avis/idées avec plaisir

Dernière modification par freebird (Le 12/12/2007, à 16:36)

Hors ligne

#35 Le 12/12/2007, à 17:16

Autiwa

Re : Script bash - Importer automatiquement les photos d'un appareil

Joli boulot freebird, ça a l'air très intéressant, j'ai pas le temps de tester, je serais libre comme un oiseau à  partir du 20, donc j'ai pas mal de choses à  faire à  partir de ce moment là  smile
Donc d'ici le 20, je pourrais pas trop me plonger dans le script et son test.


Pensez à éditer le titre du sujet (en éditant le premier message) pour rajouter un "[Résolu]" ça évite à ceux qui veulent donner un coup de main, d'ouvrir un sujet où il n'y a plus d'aide à donner.

Hors ligne

#36 Le 13/12/2007, à 09:49

jahwork

Re : Script bash - Importer automatiquement les photos d'un appareil

Voici les résultats / remarques sur mes tests :

- import général ok avec un Canon ixus 850 (PTP), j'ai suivis le fil suivant :
  + détection ok : valider
  + répertoire de stockage : annuler
    - choix d'un nouveau répertoire : valider
  + choix du format de date : modification du champ + valider
  + choix des opérations :
    - 1,2 et 4 validé
  + ajout d'un commentaire par répertoire :
    - testé avec 2 dates : ok

- une erreur non critique a la fin :
  + rmdir <...> : cannot find machin... (j'ai pas l'erreur exacte sous les yeux)
    j'ai jeté un oeil, en gros tu fais 2 fois le : rmdir "$repcible"
    il faut supprimer celui de la fonction "tri_par_date_creation"

- remarque :
  + le fichier de config est une bonne idée, il faut l'approfondir

    - tu n'a pas sauvé le nouveau répertoire de stockage global choisi si on prend pas celui par défaut
     i.e. ${REP_STOCKAGE} n'est pas mis a jour correctement si je regarde mon fichier de conf a la fin
     et si je relance, il ne m'affiche pas celui que j'ai choisi
     contrairement au format date qui est bien conservé : si je relance il me mets mon format saisi avant

    - d'une manière générale il faudrait pouvoir afficher / valider en une étape toutes les données de configuration
      je m'explique : au 1er lancement c'est normal de configurer le script : APN, rep de stockage global, format de date...
      mais on n'a pas envie de le faire a chaque import
      l'idéal c'est, si le fichier de config existe, pouvoir afficher la config : APN, rep stockage, format date
      et demander a l'utilisateur de valider si ya rien a changer pour ainsi sauter toute les étapes de configuration
      si il ne valide pas, on reconfigure.
      j'espère que je suis clair smile

  + je n'ai rien a dire pour l'enchainement même : je suis ok
 
  + je n'afficherais la ligne
   "Déconnecter l'appareil afin de le débrancher en toute sécurité."
    que dans le cas d'un APN en mass storage, pour éviter de fausse manip

En gros c'est très bien ! cool

Propositions d'améliorations (et oui j'ai toujours plein d'idées big_smile ) :
  - renommage des fichiers, en utilisant le même mécanisme que le nom du répertoire (avec date)
    la il faut bien sur ajouter une option de compteur avec padding
    exemple de format : %Y-%m-%d_####.%e
    %Y, %m, %d : comme avant, c'est année, mois, jour
    # indique un compteur, le nombre de # indique le padding
    %e : l'extension d'origine
  - si c'est techniquement possible, lors du choix d'un commentaire de répertoire par date,
    afficher une photo prise a cette date : ceci pour nous aider dans le choix du commentaire smile
    en effet si j'importe des photos de plusieurs jours, je ne sais plus trop quelle date correspond a quoi
    si je vois une photo, ça m'aide

voila voila
Merci !

Hors ligne

#37 Le 13/12/2007, à 12:33

rereleputois

Re : Script bash - Importer automatiquement les photos d'un appareil

Bonjour à  tous,

Superbe evolution en effet. Bon ce que je comprend, c'est que je vais deja remballer mon scribounet pourritos que j'avais fait tous seul (tous seul, c'est beaucoup dire) dans mon coin wink

Ensuite, je vais donner des idées et laisser faire les pro du bash ... et en profiter pour essayer de comprendre les sript ainsi ecrit ....
Alors, comme idée, je me demande s'il ne serait pas mieux de creer un repertoire par annee puis des sous repertoires par mois comme faisait mon script pouritos sus nommé :

#Répertoire racine sur l'ordinateur o๠les photos doivent être extraites
rep="/home/$USER/Desktop/Photos/"

for fichier in *.*
do
   an=`exiftool $fichier | grep 'Create Date'|cut -d':' -f2`
   mois=`exiftool $fichier | grep 'Create Date'|cut -d':' -f3`
   mkdir -p "$rep/$an"
   mkdir -p "$rep/$an/$mois"   
   cp $fichier  "$rep/$an/$mois/"
done

Puis on stock les photos dans ces repertoires en integrant dans leur nom l'annee, le mois et l'heure de prise de vue. En combinant ça avec les donnees IPTC (comme le fait Gthumb par exemple), il sera plus facile de les retrouver par la suite.

En tous les cas, je vais aussi tester ce script et dire si j'ai des bugs

A bientà´t

Regis

PS : j'ai comme projet lointain (vu mes competences en programmation hmm) de faire un utilitaire capable de retrouver les photos d'apres leurs donnees IPTC/EXIF.

Dernière modification par rereleputois (Le 13/12/2007, à 12:47)


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

#38 Le 13/12/2007, à 14:56

jahwork

Re : Script bash - Importer automatiquement les photos d'un appareil

rereleputois a écrit :

Bonjour à  tous,
[snip]
Alors, comme idée, je me demande s'il ne serait pas mieux de creer un repertoire par annee puis des sous repertoires par mois comme faisait mon script pouritos sus nommé :
[snip]

F-spot le fait de base dans sa procédure d'import de photo.
Jettes-y un Å“il

Hors ligne

#39 Le 13/12/2007, à 16:18

freebird

Re : Script bash - Importer automatiquement les photos d'un appareil

rereleputois a écrit :

Ensuite, je vais donner des idées et laisser faire les pro du bash ... et en profiter pour essayer de comprendre les sript ainsi ecrit ....

Essayer c'est bien mais réussir c'est mieux donc si tu as des questions, tu demandes et je répondrai wink

Pour le renommage automatique des fichiers ça peut devenir complexe. Chacun va vouloir des trucs bien spécifiques mais plusieurs possibilités peuvent s'étudier smile

Sinon, j'ai bien pris note de tous les commentaires/avis/bugs lol Je regarderai tout ça en détail prochainement. J'en ai déjà  corrigé certains, je poserai la dernière version ce soir si j'y pense yikes

Hors ligne

#40 Le 14/12/2007, à 12:50

viper69

Re : Script bash - Importer automatiquement les photos d'un appareil

question d'un noobs (4mois d'existance ubuntuesque). big_smile
Ce prog me plait bien, je voudrais l'utiliser. que doit je faire?
- Récupérer le coding est le sauver dans un fichier, mais dans ce cas comment l'exécuter?
- Dans le forum on parle souvent de compilation, doit je procéder à  cette manip et si oui comment?
- procéder autrement .... Là  j'ai plus d'idée sad

Excuser ces questions surement idiotes....:P
Dans l'attente de vous lire


Viper69
J'ai ouvert les fenêtres - J'ai vu que l'on pouvait être libre
Le manuel disait "Nécessite Windows XP ou mieux". J'ai donc installé Linux.
Ubuntu depuis 7.04 / Laptop: PressarioC60 / Bureau: CQ5335 / Minipc:LDLC Mercure ML1-C1-2-H1

Hors ligne

#41 Le 14/12/2007, à 14:57

freebird

Re : Script bash - Importer automatiquement les photos d'un appareil

Pas besoin de compilation avec un script bash, c'est un langage interprété. voici ce qu'il faut faire :
- copier le code
- ouvrir un terminal
- créer un fichier texte et l'ouvrir : gedit import_photos.sh
- coller le code
- mettre les droits d'exécution : chmod +x import_photos.sh
- lancer : ./import_photos.sh

Je rappelle que ce n'est pas une version finalisée donc attention smile

Hors ligne

#42 Le 15/12/2007, à 07:33

viper69

Re : Script bash - Importer automatiquement les photos d'un appareil

Merci.
J'avais bien compris que c'était qu'en stade dévelloppement. Et comme un jour il faut sortir de la cour des petits pour la cours des grand, que les transfert de fichier ce galére (et qu'il faut automatiser au mieux pour le reste de la famille histoire de finir leur convertion smile ) Bref je n'ai pas envie de rester toujours qu'un utilisateur. Donc je me lance dans l'apprentissage avec votre projet (joignions l'utile à  l'agréable).
Avez vous des pistes d'autoformation en ce qui concerne le langage utilisé histoire de comprendre les arcanes de votre dévellpeement.
A+ et merci


Viper69
J'ai ouvert les fenêtres - J'ai vu que l'on pouvait être libre
Le manuel disait "Nécessite Windows XP ou mieux". J'ai donc installé Linux.
Ubuntu depuis 7.04 / Laptop: PressarioC60 / Bureau: CQ5335 / Minipc:LDLC Mercure ML1-C1-2-H1

Hors ligne

#43 Le 15/12/2007, à 12:49

freebird

Re : Script bash - Importer automatiquement les photos d'un appareil

Quelques trucs pour t'aider :
- un tuto sympa pour commencer avec le bash : http://www.trustonme.net/didactels/148.html
- la majorité des commandes sont documentées dans ce qui est appelé manpage, pour les utiliser : man <nom de la commande>
- tu as aussi le centre d'aide Ubuntu : le ? sur fond bleu ou yelp pour le lancer d'un terminal

Ce que j'ai dis à  rereleputois vaut pour toi, je répond aux questions si ça concerne ce script. Si tu veux d'avantage d'aide sur la compréhension du bash en général, ouvre un autre sujet et on en parlera avec d'autres personnes wink

Dernière modification par freebird (Le 15/12/2007, à 12:53)

Hors ligne

#44 Le 15/12/2007, à 19:41

rereleputois

Re : Script bash - Importer automatiquement les photos d'un appareil

Bonjour à  tous,
merci pour le tuto sur basch freebird, tres synthetique et efficace.
Sinon, j'ai une propositon, pourquoi ne pas etendre la notion d'importation a n'importe quel repertoire ? En effet, imaginez quelqu'un qui se retrouve avec un CD (plein de photos) donné par un copain et qui voudrait l'integrer dans ses photos ?
L'ideal, ça serait d'avoir une fenetre qui propose de choisir la source d'importation en incluant l'appareil photo (s'il est connecte), le CD ou DVD (s'il est inseré dans le lecteur) et finalement un repertoire à  choisir.
On pourrait en profiter pour appeler les points de montage par des petits noms plus sympa que /media/nianiania tongue. ... du genre /appareil photo, /lecteur CD. (Mais c'est peut être plus facile a dire qu'à  faire !)

Qu'en pensez-vous?

Regis

PS : c'est vrai qu'il ne faudrait pas tomber dans une usine à  gaz non plus
PPS : au fait, bons partiels aux personnes concernées big_smile que la stuss soit avec vous !


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

#45 Le 16/12/2007, à 12:25

Prometee

Re : Script bash - Importer automatiquement les photos d'un appareil

Bonjour,

Je vois une petite amélioration qu'on pourrait intégrer à  postériori dans ton script :
- La possibilité de retailler les photos en même temps qu'on les importent.

Pour ça y a l'extension de nautilus qui pourrait servir, ou un logiciel de "redimensionnement" en ligne de commande...

Je propose ça, parce que j'ai aussi une belle famille qui utilise souvent leur apn et qui oublient de retailler les photos avant de les transférer par mail...

Hors ligne

#46 Le 17/12/2007, à 18:41

freebird

Re : Script bash - Importer automatiquement les photos d'un appareil

@rereleputois:
A l'heure actuelle le script permet déjà de récupérer les photos d'un CD ou d'un répertoire :
- si gphoto2 détecte un APN tu as le choix de l'utiliser ou pas
- si tu ne l'utilises pas il te propose une liste de point de montage, tu peux donc choisir autre chose que l'APN (un CD par exemple)
- si tu ne choisi pas un point de montage, tu peux alors prendre n'importe quel répertoire.

J'ai prévu de modifier le script pour que ce soit plus simple à faire mais ça le gère déjà.

Le renommage des points de montage on ne traitera pas ça ici, si c'est dans /media que c'est monté ce n'est pas pour rien. Libre à toi de changer ça mais ce script ne le fera pas.

@Prometee :
Je ne connais pas les extension de nautilus mais la commande convert d'ImageMagick permet de faire ça assez facilement. Quand j'aurai fini tout ce que je suis en train de faire je regarderai peut-être pour ajouter ça.
Ce script pouvant très bien être dissocié de celui là, si quelqu'un veut se lancer dans cette partie, qu'il le fasse et on fusionnera par la suite. On peut se mettre d'accord ensemble sur le principe de fonctionnement pour aller plus vite dans la fusion des deux.

Hors ligne

#47 Le 17/12/2007, à 19:09

Prometee

Re : Script bash - Importer automatiquement les photos d'un appareil

Si je trouve un peu de temps pendant les vacances, je suis partant... wink

Hors ligne

#48 Le 17/12/2007, à 19:26

llwynrt

Re : Script bash - Importer automatiquement les photos d'un appareil

bonjour

pour redimensionner les images, il y a nis : http://www.creationgif.com/debian/nis/index-fr.html

Marie-Lyse


Les erreurs Windows, c'est un peu comme les rêves, il faut savoir les interpréter, parfois ça peut vouloir dire quelque chose !

Hors ligne

#49 Le 17/12/2007, à 19:46

Prometee

Re : Script bash - Importer automatiquement les photos d'un appareil

C'était justement de cette extension que je parlais ... wink

Merci ^^

Dernière modification par Prometee (Le 17/12/2007, à 19:46)

Hors ligne

#50 Le 21/12/2007, à 13:31

pinguy

Re : Script bash - Importer automatiquement les photos d'un appareil

Salut les loulous

Je travaille sur le script de base pour y intégrer un fonction de redimensionnement automatique et une fonction de renommage. je posterais mon travail une fois terminé si qqun veut bien tout fusionner par la suite.

A+

Hors ligne