cClaude.rocks ☕ Le blog

[Nouvelles technologies, sciences et coups de gueule…]

Menu
đŸ˜€ Ce billet a Ă©tĂ© Ă©ditĂ© le : 2021-03-31

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 :

├── 2018 │   ├── 2018-02-14 │   ├── 2018-04-02 
 
 │   └── 2018-12-23 ├── 2019 │   ├── 2019-01-03 
 
 │   ├── 2019-11-12 
 
 │   └── 2019-12-25 └── 2020 ├── 2020-01-19 
 └── 2020-04-22

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 +

኿


â„č 2006 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog