Un petit script bash
pour trier vos photos et vos vidéos par année, puis par jour.
Cette méthode est valide pour les photos ayant un nom du type IMG_
suivi de la date au format (aaaammjj en chiffre) puis ayant comme extension .jpg
ainsi que pour les vidéos ayant un nom du type VID_
suivi de la date au format (aaaammjj en chiffre) puis ayant comme extension .mp4
.
C’est typiquement le format produit par un téléphone Android, mais il est facilement adaptable. Vous pouvez vous référer au billet : Sauvegarder toutes les données de votre téléphone pour savoir comment récupérer vos photos à l’aide d’un script. Notez que d’autres solutions sont possibles.
Exemple d’arborescence générée :
Le code complet
Pour lire se code, il faut commencer par la dernière ligne (contenant main
) et
ensuite rechercher la fonction main
(function main
) et ainsi de suite.
Ce code est simpliste (il manque d’optimisations), il correspond à une méthode assez naturelle de faire ce tri manuellement.
#!/bin/bash
#
# sort-media.sh
#
# il faut lancer ce code depuis le répertoire contenant
# les photos et les vidéos non triés
#
function sort_per_month {
local -r yeardir="$1"
local file=
local filename=
local filedir=
local year=
local month=
local day=
local subdir=
# Lit ligne par ligne le résultat de la recherche.
# La recherche se trouve à la fin de boucle (do … done).
while read -r file ; do
# On prend uniquement le nom du fichier (sans le chemin)
filename="$( basename "${file}" )"
# on récupère l'année (saute 4 caractère et en récupère 4)
year="${filename:4:4}"
# Petit test pour écarter d’éventuels intrus
# (mis à la main dans le dossier)
if [ "${yeardir}" != "${year}" ] ; then
echo "yeardir=${yeardir} year=${year} filename=${filename}"
# On arrête tout en cas de problème
exit 1
fi
# Récupère le mois (saute 8 caractères et en récupère 2)
month="${filename:8:2}"
# Récupère le mois (saute 10 caractères et en récupère 2)
day="${filename:10:2}"
# Nom du répertoire pour le jour du média (format ISO)
subdir="${year}/${year}-${month}-${day}"
# Création du répertoire où sera mis le média (s’il n’existe pas)
mkdir -vp "${subdir}" || exit 1
# Déplace le média dans le répertoire
mv -v "${file}" "${subdir}/${filename}"
done < <( find "${yeardir}" -maxdepth 1 -type f -name 'VID_*.mp4' -or -name 'IMG_*.jpg' )
}
function sort_per_year {
local -r yeardir="$1"
mkdir -vp "${yeardir}" # Création du répertoire s’il n’existe pas.
mv -v "VID_${yeardir}"*.mp4 "${yeardir}/" # Déplace les vidéos de l’année dans le dossier de l’année
mv -v "IMG_${yeardir}"*.jpg "${yeardir}/" # Déplace les photos de l’année dans le dossier de l’année
sort_per_month "${yeardir}" # Appel sort_per_month avec l’année
}
function main {
# Pour les années 2017, 2018, 2019 puis 2020
for year in $( seq 2017 2020 ) ; do
echo "${year}"
sort_per_year "${year}" # Appel sort_per_year avec l’année
done
}
# Çà commence ici
main # On appelle main sans argument
Bon rangement…
En savoir +
ᦿ