Disons que j'ai un tas de photos, toutes avec des informations EXIF correctes, et les photos sont nommées aléatoirement (à cause d'un problème que j'ai eu). J'ai un petit programme appelé jhead
qui me donne la sortie ci-dessous:
$ jhead IMG_9563.JPG
File name : IMG_9563.JPG
File size : 638908 bytes
File date : 2011:02:03 20:25:09
Camera make : Canon
Camera model : Canon PowerShot SX210 IS
Date/Time : 2011:02:03 20:20:24
Resolution : 1500 x 2000
Flash used : Yes (manual)
Focal length : 5.0mm (35mm equivalent: 29mm)
CCD width : 6.17mm
Exposure time: 0.0080 s (1/125)
Aperture : f/3.1
Focus dist. : 0.29m
ISO equiv. : 125
Exposure bias: -1.67
Whitebalance : Manual
Light Source : Daylight
Metering Mode: pattern
Exposure Mode: Manual
Maintenant, je dois renommer toutes les photos du dossier au format suivant:
001.JPG
002.JPG
003.JPG
...
Où le nombre mineur serait l'image la plus ancienne et le maximum la plus récente.
Je ne suis pas un bon script, donc je demande de l'aide.
Je pense qu'un script bash est suffisant, mais si vous vous sentez plus à l'aise, vous pouvez écrire un script python.
J'ai pensé à quelque chose comme:
$ mv IMG_9563.JPG `jhead IMG_9563.JPG | grep date`
mais je ne sais pas comment faire cela pour tous les fichiers à la fois.
ls *.JPG | wc > rename
Et puis je devrais utiliser un script renommé en XXX.JPGwc
, j'ai oublié celui à commander par son nom.Réponses:
Vous pouvez le faire pour tous les fichiers en utilisant une boucle for (dans le shell / dans un shell-script):
Ce n'est qu'un aperçu très basique. Supprimez
echo
lorsque vous avez vérifié que tout fonctionne comme prévu.la source
File date : 2011:02:03 20:25:09
. Comment filtrer uniquement la deuxième colonne?j=`jhead "$i" | grep date | sed 's/.* //'`.jpg
au lieu?'
avant `` .jpg`Je viens de découvrir ici que jhead peut tout faire pour vous! :)
la source
%i
(ou%03i
, plus précisément) donnera un numéro de séquence, comme demandé dans la question d'origine. La combinaison des deux n'est peut-être pas une mauvaise idée.Si quelqu'un a besoin d'un renommage plus complexe, par exemple pour inclure des valeurs d'exposition clés dans le nom de fichier, voici mon petit script. Il renomme les fichiers jpeg à quelque chose comme ceci:
NightSky_2014.08.27_22.30.05_NX20_F2.8_f20.0mm_20s_ISO800.jpg
.la source
J'ai aimé le code publié par maxschlepzig mais j'ai quand même eu des difficultés avec la sortie.
Le problème était l'espace dans le nom de fichier résultant (entre la chaîne de date et la chaîne d'heure). Bien que trivial pour toute personne utilisant une interface graphique, cela rend la gestion des fichiers sur la ligne de commande un peu plus difficile.
Ici, la commande «sed» a été substantiellement modifiée en quatre opérations «sed» distinctes en faveur de l'argument monolithique précédent. Pour me convenir, ce qui suit modifie également le fichier en autorisations 644 normales.
la source
sed
assez bien, donc je comprends essentiellement ce que vous essayez de faire. Mais notre objectif à Stack Exchange n'est pas de distribuer des sandwichs au poisson ou d'écrire des milliers de solutions uniques à des questions trivialement distinctes; notre objectif est d'enseigner aux gens comment pêcher (c.-à-d., enseigner aux gens, y compris l'intervenant actuel et les futurs lecteurs, comment résoudre leurs propres problèmes). À cette fin, votre réponse serait meilleure si vous expliquiez ce que vous tentez. (Veuillez ne pas répondre dans les commentaires; modifiez votre réponse pour la rendre plus claire.)… (Suite)Parce qu'il est plus facile de gérer (à mon humble avis), je me suis écrit un script Ruby:
Qu'est-ce que cela fait?
Itère tous les fichiers passés en paramètres (par exemple
*.JPG
).J'ai vérifié qu'il gère correctement les fichiers RAW et les vidéos. Cela devrait fonctionner avec tout ce qui
exiftool
peut être traité.Ne fait rien si un fichier
exiftool
signale une erreur, ouCela le rend assez robuste. En particulier, aucun fichier ne peut disparaître (en silence) comme c'est le cas pour certaines des autres réponses.
la source
exiv2
serait une alternative de manipulation, qui permet une syntaxe très simple:Donc, cela renommerait tous les jpeg du dossier actuel:
Si vous souhaitez également ajouter des informations géographiques, vous pouvez utiliser
exivtool
:la source
J'aime la solution de @ Kevin, car je voulais aussi garder le nom d'origine (éviter les problèmes avec les images prises dans la même seconde), voici ma solution:
la source
Première publication par un débutant ... Premier script bash ... J'ai aimé la solution Libor / HalosGhost ci-dessus car elle incluait plus de détails dans le renommage. Mais après les tests, les noms de fichiers en double finiraient par perdre des fichiers. J'ai donc ajouté une balise de compteur à la fin du nom de fichier pour faciliter la référence et la prévention des collisions. Je suis sûr que quelqu'un ici peut améliorer cela, mais j'ai pensé que cela pourrait aider.
Mes excuses après avoir affiché le code. J'ai des difficultés avec l'interface, mais si quelqu'un pouvait m'orienter vers une façon correcte de faire les choses, ce serait formidable.
la source