web-dev-qa-db-fra.com

Comment renommer par lots les fichiers JPEG en date d'image en ajoutant un nombre qui se réinitialise chaque jour?

J'utilise pyrenamer avec ma collection de photos et cela fonctionne très bien, à une exception près. Je souhaite qu'il renomme les photos en fonction de la métadonnée de leur date de prise, avec un nombre à trois chiffres à la fin. Chaque dossier de ma bibliothèque représente un jour et je souhaite que les photos portent les numéros 001 à 999, en commençant par 001 pour chaque dossier. Un exemple de nom de fichier serait 2016-01-31-001.jpg.

Shotwell gère la création de la structure de répertoire lors de l'importation avec une structure %Y/%m/%d dans les options, mais lorsque j'utilise pyrenamer de manière récursive dans le répertoire ~/Pictures, le résultat attendu ne s'affiche pas. Il renomme par date mais continue à augmenter d'un dossier à l'autre, au lieu de commencer à 001 pour chaque nouveau dossier. Y a-t-il un moyen plus facile de s'y prendre?

Je sais que je pourrais ajouter plus de variables de métadonnées et renommer en heures, minutes et secondes, mais cela donne des noms de fichier plus longs que je ne le souhaite. Mon appareil photo peut également prendre plusieurs photos par seconde, ce qui est problématique pour le changement de nom.

Quelle est la façon la plus simple de faire cela, s'il vous plaît? J'aime utiliser pyrenamer mais un script bash convient également.

Courant de sortie:

Pictures/
├── Folder 1/
│   ├── YY-MM-DD-001.jpg
│   └── YY-MM-DD-002.jpg
├── Folder 2/
│   ├── YY-MM-DD-003.jpg
│   └── YY-MM-DD-004.jpg
...

Sortie désirée:

Pictures/
├── Folder 1/
│   ├── YY-MM-DD-001.jpg
│   └── YY-MM-DD-002.jpg
├── Folder 2/
│   ├── YY-MM-DD-001.jpg
│   └── YY-MM-DD-002.jpg
...
2
Tom Brossman

Pour renommer toute votre bibliothèque d'images de photos JPEG au format AAAA-MM-JJ-XXX.jpg , en comptant à partir de -001 à chaque nouveau jour , utilisez cette commande avec exiftool:

exiftool -fileOrder DateTimeOriginal -recurse -extension jpg -extension jpeg -ignoreMinorErrors '-FileName<CreateDate' -d %Y-%m-%d%%-.3nc.%%e ~/Pictures/

Pour expliquer complètement la commande, voici comment cela fonctionne.

  1. exiftool lance le script.
  2. -fileOrder DateTimeOriginal oblige exiftool à traiter les images dans le même ordre . Cela est essentiel pour conserver la numérotation des images dans la journée dans l'ordre chronologique d'origine.
  3. -recurse traite récursivement les sous-répertoires, ce qui est utile si vous utilisez Shotwell pour importer, car les photos sont placées dans des répertoires organisés par date.
  4. -extension jpg -extension jpeg s'assurera que seuls les fichiers JPEG sont traités. (Notez que ceux-ci ne sont pas spécifiques à la casse et que jpg = JPG, nous saisissons tout)
  5. -ignoreMinorErrors Ignorez les erreurs n'affectant pas le résultat souhaité (en général, des problèmes de lecture des balises non liées qui ne sont pas nécessaires pour cette opération).
  6. '-FileName<CreateDate' Insère la date de création de la photo dans le nom du fichier.
  7. -d %Y-%m-%d%%-.3nc.%%e Ici -d définit le format de date de sortie souhaité. Nous utiliserons un mois, un jour et un jour (%Y-%m-%d) coupés à quatre chiffres, suivis d'un numéro à trois chiffres commençant par 001 (%%-.3nc), en préservant l'extension de fichier d'origine (.%%e).
  8. ~/Pictures/ est le dernier élément, il ne s'agit que du répertoire que exiftool doit traiter avec la commande.

Une note sur les erreurs, le -ignoreMinorErrors aide mais vous pouvez quand même voir le message "Avertissement: répertoire PreviewIFD incorrect" qui est sûr à ignorer ou "Avertissement: Aucune balise accessible en écriture n'est définie à partir de /path/to/problem/image.jpg". Le deuxième problème n'a pas pu être résolu, mais je ne l'ai vu que pour quelques images. Je les ai donc renommées manuellement dans Nautilus en solution de contournement.

Cette commande pourrait encore être améliorée, mais elle est testée et fonctionne sur une grande bibliothèque de photos (40 Go, 13 000 images). Elle est rapide et ne génère aucune erreur. .

3
Tom Brossman