GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment renommer plusieurs photos et vidéos basées sur des données Exif ?

J'importe souvent des photos et des vidéos (ayant principalement des extensions JPG et MOV) à partir d'appareils photo numériques et de tablettes sur mon PC, et j'aimerais idéalement les voir triés selon les dates et heures auxquelles ils ont été pris déjà présents dans leurs données EXIF. Et d'où mon souhait de les renommer tous de préférence en utilisant un simple Script Nautilus en insérant de préférence les horodatages avant chaque nom de fichier.

Jusqu'à présent, je n'ai réussi qu'à rassembler le script Nautilus suivant, qui, à mon avis, est loin d'être parfait :

for i in *.*
do
mv -i "$i" "$(exiftool -CreateDate "$i" | awk -F ': ' '{print $2}')_"$i"" 
done

Ce que je n'aime pas dans cette méthode de renommage, ce sont les deux-points utilisés dans les horodatages EXIF (par exemple "2013:09:03 20:55:09_IMG_0108.JPG") qui pourrait créer des problèmes lors du transfert ultérieur de ces fichiers vers d'autres environnements (par exemple Windows).

Cette commande (utilisant exiv2 au lieu de exiftool ) permet de manipuler facilement la date et l'heure, mais son inconvénient est qu'il ne fonctionne pas sur les fichiers vidéo (par exemple, MOV) :

exiv2 -k -r '%Y-%m-%d_%H-%M-%S_:basename:' rename "$i"

J'espère donc que quelqu'un pourra trouver une meilleure solution. Et ce serait magique s'il réussissait même à convertir les noms de fichiers et les extensions d'origine en minuscules !

Réponse acceptée :

Ce que je n'aime pas dans cette méthode de renommage, ce sont les deux-points utilisés dans les horodatages EXIF ​​​​(par exemple "2013:09:03 20:55:09_IMG_0108.JPG") qui pourraient créer des problèmes lors du transfert ultérieur de ces fichiers vers d'autres environnements ( ex. Windows).

Vous pouvez exécuter le schéma de nommage via sed , pour remplacer les deux-points par des tirets et les espaces par des traits de soulignement, comme ceci :

mv -i "$i" "$(exiftool -CreateDate "$i" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_$i"

Quant à mettre le tout en minuscules, vous pouvez utiliser rename :

rename 's/(.*)/\L$1/' file.JPG
##  or
rename 's/(.*)/\L$1/' *.*

Ou vous pouvez le faire dans votre script en utilisant sed , comme dans :

j=$(echo "$i" | sed -e 's/\(.*\)/\L\1/')

…puis utilisez le $j variable à la place du dernier $i de votre mv doubler. Cette méthode sed est légèrement plus portable (si cela vous intéresse) car différentes distributions Linux ont des commandes de renommage différentes, tandis que sed est universel.

Ou, alternativement, le script peut être modifié comme suit pour effectuer la conversion du nom de fichier en minuscules au début en utilisant tr à la place :

for arg 
do
  tmp="$(echo "$arg" | tr '[A-Z]' '[a-z]')"
  mv -i "$arg" "$(exiftool -CreateDate "$arg" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_$tmp"
done

Pour exécuter des commandes légèrement différentes pour différents types de fichiers, une instruction bash case peut être utilisée dans ce script. Par exemple :

#! /usr/bin/env bash
for filename in ./*
do
  tmp="$(echo "$filename" | tr '[A-Z]' '[a-z]')"
  case "$filename" in
    *.MOV|*.mov) 
      mv -i "$filename" "$(exiftool -a -s -CreateDate-tur "$filename" | awk -F ': ' '{print $2}' | sed -e 's/\-[0-9][0-9]\:00//g' -e 's/\+[0-9][0-9]\:00//g' -e 's/:/-/g' -e 's/ /_/g')_$tmp"
      ;;
    *.JPG|*.jpg)
      mv -i "$filename" "$(exiftool -a -s -CreateDate "$filename" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_"$tmp""
      ;;
    *)
      echo 'Not a *.jpg or a *.mov!'
      ;;
  esac
done

Dans cet exemple, renommer les fichiers MOV qui ont des horodatages CreateDate TOUT NOMBRE d'heures APRÈS OU AVANT les fichiers JPG est ajusté en utilisant une autre donnée EXIF ​​​​(-tur) et en supprimant ce suffixe de différence de temps, et il peut être nécessaire de changer -tur partie selon l'emplacement défini dans le système.


Ubuntu
  1. Pourquoi les données sont importantes et comment les protéger

  2. Comment rechercher et supprimer des photos en double sous Linux

  3. Comment renommer plusieurs fichiers à l'aide de Find ?

  4. Comment renommer un utilisateur en toute sécurité ?

  5. Comment démarrer et arrêter OSWatcher

Comment renommer des fichiers et des répertoires dans Ubuntu 20.04

Fwbackups - Comment installer et sauvegarder vos données sur Ubuntu

Comment fusionner des données sous Linux

Comment installer ELK Stack (Elasticsearch, Logstash et Kibana) sur Ubuntu 20.04

Comment supprimer des données de fichier Exif avec ExifTool dans Ubuntu 20.04

Comment renommer des fichiers et des répertoires sous Linux