Si je renomme des images via exiv en date et heure exif, je fais ce qui suit:
find . -iname \*jpg -exec exiv2 -v -t -r '%Y_%m_%d__%H_%M_%S' rename {} \;
Maintenant, il peut arriver que les images aient exactement le même horodatage (y compris les secondes). Comment puis-je rendre le nom de fichier unique automatiquement?
La commande doit être stable en ce sens que si je l'exécute à nouveau sur la même structure de répertoires (peut-être après l'ajout de nouvelles images), les images déjà renommées ne doivent pas changer et si des images avec des noms de fichiers déjà existants sont ajoutées, les nouveaux noms de fichiers doivent être uniques ainsi que.
Ma première tentative a été simplement de laisser le nom de base d'origine dans le nom de fichier résultant, mais la commande ne serait pas stable dans le sens ci-dessus.
la source
mv
le fichier.exiftool '-filename<createdate' -d %Y_%m_%d__%H_%M_%S%%-c.%%le "-filemodifydate<createdate#" -r -progress .
. Vous pourriez peut-être transformer votre commentaire en réponse.Réponses:
Vous voudrez peut-être essayer à la
jhead
place ce qui fait cela prêt à l'emploi (aveca
,b
...z
suffixes permettant jusqu'à 27 fichiers avec la même date) et n'a pas le problème de stabilité mentionné par @meuh:Ou en utilisant
exiftool
(exemple dans la page de manuel):(ici en
%-c
étant un suffixe numérique commençant par-
)la source
Ma version de
exiv2
(0.25 001900) vous demandera interactivement quoi faire lorsque le nom de fichier existe déjà.En ajoutant une option,
-F
il ajoutera automatiquement un supplément_1
(ou_2
etc) au nom.Si la commande est exécutée une deuxième fois, elle indique:
et ne fait rien, mais il se confond s'il y a la
_1
pièce, et la renommera_2
. Il basculera comme ceci de manière non destructive à chaque exécution. Vous pouvez ignorer cela si vous le souhaitez, ou modifier votrefind
modèle pour ignorer les fichiers correspondant au modèle de date avec une_
pièce.Par exemple, le modèle d'expression régulière pour le format de date commence
[0-9]{4}_[0-9]{2}_...
. Pour simplifier, je vais juste chercher un mélange de 20 caractères de l'ensemble0..9
et_
, qui est regex[0-9_]{20}
. Pour cela, le suffixe de_
suivi d'au moins 1 chiffre à rechercher est_[0-9]{1,}.jpg
. Étant donné que l'expression régulière doit correspondre à l'ensemble du chemin, et pas seulement au nom de base, l'expression régulière finale, y compris le répertoire, l'est.*/[0-9_]{20}_[0-9]{1,}.jpg
.Vous pouvez donc utiliser une recherche comme:
la source
Exiv2 peut le gérer seul. J'ai également passé beaucoup de temps à chercher de l'aide à ce sujet, jusqu'à ce que j'aille voir le manuel exiv2. L'option -F résout ce problème.
Il ajoutera un _N à la fin si le fichier existe déjà.
Et pour ceux qui recherchent une option permettant de créer un dossier.
la source
Le pyrenamer ne fonctionnera pas sur mon nouvel Ubuntu 16.04 installé, donc je dois aussi trouver un autre moyen de résoudre ce problème.
J'ai des fichiers tels que IMG_0001.JPG, IMG_0002.JPG, ... dans un dossier. Consultez ce site, /programming/917260/can-var-parameter-expansion-expressions-be-nested-in-bash
Installez d'abord "exiv2" et j'ai écrit la ligne de commande suivante:
pour img dans $ (ls *. [Jj] [Pp] [Gg] 2> / dev / null); do exiv2 -r '% Y% m% d_% H% M% S _' "$ (tmp = $ {img %%. *}; echo $ {tmp ## * _})" renommer "$ img"; terminé
Les noms de fichiers de sortie sont YYYYMMDD_HHMMSS_0001.JPG, YYYYMMDD_HHMMSS_0002.JPG, ... etc. Même les photos ont été prises à la même seconde, le numéro de série de la photo originale fera la différence.
la source