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 +
኿