photos.sh
decharger et classer les photos depuis un appareil photo
ce script a pour but de copier (ou déplacer) les photos d'un appareil photo (mounté en tant que disque de type "masse storage") dans un système de dossiers classé par date du jour de ponte de la photo. pour cela il faut avoir exiv2 installé sur votre machine.
le principe
le principe est la suivante, il suffit de:
- aller dans le dossier ou se trouvent les photos a classer, normalement ce sera l'appareil photo lui même, mais vous pouvez tout a fait utiliser le script pour classer des photos déjà prises
- exécuter le script "photo_save.sh"
le script va:
- pour chaque photo présente ainsi que celles dans les répertoires enfants
- trouver la date de prise de photo via les informations EXIF
- créer un dossier du jour dans un répertoire prédéfini et y copier la photo
paramétrage
voici les paramètres possibles :
- UNLOAD : ceci défini le répertoire "parent" ou stocker les photos
- METHOD : on peut faire du récursif ou pas.. . c'est a dire qu'on peut lui dire de ne PAS aller voir dans les sous-répertoires
- EXTENSIONS : selon la méthode choisi la syntaxe change, voir les exemples donner dans le script
perso j'utilise une copie du script par appareil photo que je renomme, par exemple j'ai photo-save-d50.sh pour mon "D50".. .. .. mais libre a chacun de faire comme il veut, bien évidment
le script
vous pouvez télécharger le script via ce lien ou alors la copier coller depuis cette page. . .. .. .
#!/bin/bash
# script designed to help unload photos from camera/cd/or_whatever
# to folders ordered by date based on EXIF info.
# USAGE: cd /to/the/folder/where/the/files/are
# sh photo-save.sh
# DEPENDS on: exiv2
# HINTS: if you have multiple cameras you can:
# - copy this script accordingly: ex. cp photo-save.sh photo-save-d50.sh
# - make sure that UNLOAD parameter is set: ex. /home/user/unload/d50/
# - now use photo-save-d50.sh instead of photo-save.sh
# - repeat the same for as many cameras you need to..
# if you didn't already know, you can chmod +x photo-save.sh and copy it
# to a "bin" folder (ex /usr/local/bin/)
#
# AUTHOR: Emmanuel REVAH manu-AT-manurevah.com http://manurevah.com/
# i'm not sure about a licence so whatever, just don't sue me.. . ... :]
# o/
# root folder for unloading pictures to
UNLOAD='/home/manu/toph/unload/d50/'
# the script can either work on files in current directory OR
# work on files in current directory AND recursively
# 1=current ; 2=recursive
METHOD=2
if [ ${METHOD} == 1 ]; then
# Methode 1 options
# types of files we want to move/copy (space separated values)
# HINT: you might need to add uppercase extensions
EXTENSIONS="*.jpg *.nef"
# list files based on EXTENSIONS
FILETYPES=`ls ${EXTENSIONS} 2>/dev/null`
fi
if [ ${METHOD} == 2 ]; then
# Method 2 options
# you'll have to add the extensions accordingly
# default line (you can replace "name" by "iname" for removing case sensitivity)
# FILETYPES=`find . -name "*.jpg" -or -name "*.nef"`
FILETYPES=`find . -name "*.jpg" -or -name "*.nef"`
# avec regex: find ./ -regex ".*(jpg|nef)$"
fi
# for every file we will find out the EXIF date and put the file into the
# apropriate dated folder (created if needed)
for i in ${FILETYPES}; do
YEAR=`exiv2 $i 2>/dev/null |grep timestamp|cut -d " " -f 4|cut -c 1-4`
MONTH=`exiv2 $i 2>/dev/null |grep timestamp|cut -d " " -f 4|cut -c 6,7`
DAY=`exiv2 $i 2>/dev/null |grep timestamp|cut -d " " -f 4|cut -c 9,10`
WHEREIGO=${UNLOAD}/${YEAR}/${MONTH}_${YEAR}/${DAY}_${MONTH}_${YEAR}
# test if value year is empty
if [ -z ${YEAR} ]
then
echo "$i: No Exif data found in the file"
else
mkdir -p ${WHEREIGO}
cp $i ${WHEREIGO}
fi;
done
exit