====== Auto-renommage photos ====== ===== Objectif ===== Un outil pour renommer automatiquement les photos.\\ J'en ai marre de ranger des photos qui s'appellent mon_super_smartphone_5dsq6$bn@àç.JPG ou mon-gros_kodak_carbonate_de_veau_156222.JPG.\\ Moi je veux à minima les classer par date, et dans un répertoire chez moi partagé par mon NAS! (Exit google photo)\\ Le mieux c'est que ça se fasse un peu tout seul. Alors allons y, et en shell s'il vous plaît. ===== Concept général ===== Je dispose d'un NAS sous linux partageant via Samba mon arborescence SMB.\\ L'idée est de scanner automatiquement un répertoire de travail grâce à **Incron**.\\ On dépose ses photos par copier/coller et paf (ça fait des ... {{http://192.168.0.11:8081/lib/images/smileys/facepalm.gif?nolink&15x15}}), un shell renomme le tout comme un grand grâce à **exiftool** et les données exif de la photo. ===== Installation de Incron ===== On commence par installer incron : sudo apt-get install incron Autoriser le user à utiliser incron : echo $USER | sudo tee -a /etc/incron.allow Configurer les dossiers et les actions à effectuer comme on le ferait pour cron : incrontab -e Le format de saisie de incrontab est :\\ **// // ** Les configurations sont présentes dans ''/var/spool/icron/*'' \\ Dans mon cas je décide de lancer un shell à la fin d'une écriture ou à la fin d'un déplacement d'un fichier dans le répertoire à scanner, l'incron mis en place ressemble à ça : /mnt/Raid/Temporaires/Photos/SAS_Renommage IN_CLOSE_WRITE,IN_MOVED_TO /home/florian/Documents/Scripts/incron_job_rename_pictures.sh $# ''$#'' est le nom du fichier qui créé l'événement, on le passe au shell qui sera bien content de savoir avec quoi il doit travailler. ===== Shell de renommage ===== Le code de incron_job_rename_pictures.sh lancé par incron est le suivant : #!/bin/bash REP_SOURCE="/mnt/Raid/Temporaires/Photos/SAS_Renommage" REP_CIBLE="/mnt/Raid/Temporaires/Photos/SAS_Renommage/JOB_OUTPUT" FIC_LOG="${REP_CIBLE}/incron_job_report.log" if [ ! $1 ] then echo "$(date '+%d/%m/%Y %R:%S') - ERROR - Incron ne donne pas le nom du fichier a traiter ..." exit 1 fi # On gere la suite du script avec un lock pour serializer l'ensemble des traitemenst qui pourraient se lancer en // (si on glisse beaucoup de fichiers dans le repertoire) # http://jdimpson.livejournal.com/5685.html SHELL_NAME=`basename "$0"`; LCK="/tmp/${SHELL_NAME}.LCK"; exec 8>$LCK; # On reste en wait tant que le lock n'est pas disponible. flock -x 8; echo "$(date '+%d/%m/%Y %R:%S') - INFO - Renommage de $1">> "$FIC_LOG" exiftool '-FileName> "$FIC_LOG" 2>&1 rc=$? if [ $rc -ne 0 ] then echo "$(date '+%d/%m/%Y %R:%S') - ERROR - Problème lors du renommage de $1">> "$FIC_LOG" exit 1 fi rm -f "${REP_SOURCE}/${1}" exit 0 La siouxerie notable est l'utilisation d'un mécanisme de lock pour sérialiser le lancement des shells : [[http://jdimpson.livejournal.com/5685.html|Lien]]\\ Incron lance le shell à chaque arrivée d'un fichier, si l'on dépose 1000 fichiers avec un bon lien gigabit, bonjour les dégâts .. j'ai testé pour rigoler, je confirme ça chauffe puis ça brûle ..\\ Avec cette astuce, les shells tournent tranquillement en série. ===== Conclusion ===== Et voilà c'est pratique : je glisse et dépose tout un tas de photos dans mon répertoire depuis windows sur mon disque partagé et mon NAS les renomme comme un grand avec un petit compte rendu en prime. ===== Des photos pour le web ===== J'ai fait la même chose pour retailler les photos, les compresser et leur supprimer les données exif.\\ Il suffit d'utiliser mogrify pour : * Retailler en 1024 de large (resize) * Supprimer les données Exif (strip) * Convertir en Jpeg progressif (interlace) * Appliquer une critère de qualité de 90% à la compression jpeg (quality) * Rotation automatique de l'image avec maj des données exif (auto-orient) mogrify -monitor -auto-orient -strip -interlace Plane -path ${REP_CIBLE} -resize 1024x768 -quality 90 "$REP_SOURCE/$1">> "$FIC_LOG" 2>&1 ~~socialite~~