#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é
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
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
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...
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
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
L'idéal serait d'offrir le choix ce qui peut se faire aussi
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 !
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
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
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
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 :
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 :
Sélection d'un répertoire si on n'a pas choisi l'un des 2 précédents :
Validation du répertoire de stockage des photos :
puis écran de sélection d'un répertoire si le répertoire ne convient pas.
Choix du format de la date pour le dossier cible :
Choix des opérations à effectuer :
Saisi des commentaires pour chaque dossier créé :
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
pmount sert pour l'utilisation de la commande "eject". D'ailleurs ça ne fonctionne pas avec mon APN. Il faut que je regarde
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à
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
+ 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 !
Propositions d'améliorations (et oui j'ai toujours plein d'idées ) :
- 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
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
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 ) 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
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
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
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
Sinon, j'ai bien pris note de tous les commentaires/avis/bugs 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
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).
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
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
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 ) 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
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 . ... 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 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...
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 ...
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