Forum Programmation.autre Regex - Modifier une heure dans une chaîne

Posté par (page perso) . Licence CC by-sa
Tags : aucun
3
2
août
2016

Bonjour,

revenant de voyage, j'ai trié mes photos issus de 2 appareils différents en les nommant de la façon suivante :

contexte_dd-mm-yyyy-hhhmmss.jpg

ca a été simple en se basant sur les données exif des photos.

Problème, apparemment un des 2 appareils a 10 minutes et 20 secondes de retard par rapport à l'autre, du coup mes photos ne sont pas bien classés chronologiquement parlant…

Je cherche donc à les renommer de nouveau en changeant le nom des photos incriminées et en appliquant ce décalage de 10m20s

Je compte utiliser rename avec une regex qui va bien, sauf que je bloque sur la faisabilité de la chose, et la syntaxe à appliquer.

Comment renommer de manière à cadrer avec ces exemples :
contexte_16-07-2016-112539.jpg en contexte_16-07-2016-111519.jpg
et plus dur
contexte_16-07-2016-110509.jpg en contexte_16-07-2016-105449.jpg

?

Ah, et… les photos sont prise entre l'aube et le crépuscule, pas besoin de s'embêter avec une photo prise à 00h05 qui provoquerait un changement de date à la veille, je n'ai heureusement pas ce problème :-)

  • # Regex master

    Posté par (page perso) . Évalué à 1.

    Sans être regex master, un language de script ou même bash peut te faire la même chose avec un peu moins de prise de tête. Tu as essayé ?

    • [^] # Re: Regex master

      Posté par (page perso) . Évalué à 1.

      Le regex était ma seule piste, je ne suis pas assez doué pour entrevoir d'autre solutions en bash… mais je suis preneur !

      • [^] # Re: Regex master

        Posté par . Évalué à 5.

        En étant tordu au point de se passer de date pour n'utiliser que du Bash (contrairement à l'exemple donné plus bas):
        for i in *.jpg ; do t=$((10#${i: -10:2}*3600+10#${i: -8:2}*60+10#${i: -6:2}-620)) ; mv "$i" "${i:0:-10}$(printf %02d%02d%02d $((t/3600)) $((t/60%60)) $((t%60)))${i: -4:4}" ; done

        Sinon, une regexp ne fait que reconnaître un motif, pour transformer ton texte, il faut lui ajouter une autre construction. Donc grep n'est pas suffisant, mais sed l'est (en passant par de l'arithmétique unaire).

  • # passage par epoch ou par les seconde

    Posté par . Évalué à 5.

    • tu prends ta date,
    • tu convertis en seconde,
    • tu enleves 10min20sec (620sec)
    • tu reconvertis en date
  • # rename

    Posté par . Évalué à 5.

    Déjà attention avec rename, Debian a un rename qui gère regex et qui fonctionne totalement différemment de celui de utils-linux qu'on trouves généralement sur les autres distributions (et qui lui ne gère pas les regex).

    Sinon en bash avec le rename normal (celui de util-linux) :

    # récupérer le nom du fichier
    file=contexte_16-07-2016-110509.jpg
    # Récupérer la partie de la date qui nous intéresse
    date_old=${file:(-10):(-4)}
    # Calculer la nouvelle date
    date_new=$(date +%H%M%S --date "jan 1 1970 ${date_old:(-6):(-4)}:${date_old:(-4):(-2)}:${date_old:(-2)} 10 minutes ago 20 sec ago")
    # Renommer le fichier
    rename $date_old $date_new $file
  • # jhead

    Posté par (page perso) . Évalué à 8.

    jhead est un logiciel qui permet de renommer les images en fonction des données exif et de modifier les données exif des images (man jhead)

    Ce que tu peux faire :

    prendre tes images dont le timestamp exif et donc le nom est décalé dans le passé et faire une copie dans un dossier puis modifier le timestamp exif en lui ajoutant 10 min 20 secondes :

    jhead -ta+10:20 contexte_*.jpg

    et les renommer en fonction du nouveau timestamp exif :

    jhead -ncontexte_%d%-%m-Y-%H%M%S contexte_*.jpg

    wind0w$ suxX, GNU/Linux roxX!

  • # Mes deux cents

    Posté par . Évalué à 3.

    J’ai eu le même besoin une fois, je m’en étais sorti avec la méthode de 태

    https://linuxfr.org/forums/general-general/posts/rectifier-des-tags-sur-des-photos

  • # Problème résolu

    Posté par (page perso) . Évalué à 2.

    Merci à tous pour toutes vos pistes, j'ai réussi à régler le problème ;-)

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.