J'importe souvent des photos et des vidéos (ayant pour la plupart des extensions JPG et MOV) depuis des appareils photo numériques et des tablettes vers mon PC, et j'aimerais idéalement les voir triées en fonction des dates et heures auxquelles elles ont été prises déjà présentes dans leurs données EXIF. Et d'où mon souhait de les renommer tous de préférence à l'aide d'un simple Nautilus Script 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, je pense, 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 changement de nom, ce sont les deux points utilisés dans les horodatages EXIF (par exemple, "2013: 09: 03 20: 55: 09_IMG_0108.JPG"), ce qui pourrait créer des problèmes lors du transfert de ces fichiers plus tard vers d'autres environnements ( par exemple Windows).
Cette commande (en utilisant exiv2 au lieu d' exiftool ) permet de manipuler facilement les horodatages mais son inconvénient est qu'elle 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 extensions d'origine en minuscules!
Réponses:
Vous pouvez exécuter le schéma de nommage
sed
pour remplacer les deux-points par des tirets et des espaces par des traits de soulignement, comme suit:Quant à rendre le tout en minuscules, vous pouvez utiliser
rename
:Ou vous pouvez le faire dans votre script en utilisant
sed
, comme dans:... puis utilisez la
$j
variable à la place de la finale$i
de votremv
ligne. Cette méthode sed est légèrement plus portable (si cela vous importe) car différentes distributions Linux ont différentes commandes de changement de nom, tandis que sed est universel.Ou bien, le script peut être modifié comme suit pour effectuer la conversion du nom de fichier en minuscules au début en utilisant à la
tr
place: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:
Dans cet exemple, renommer les fichiers MOV qui ont des horodatages CreateDate N'IMPORTE QUEL 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 décalage horaire, et il peut être nécessaire de changer -tur part selon l'emplacement défini dans le système.
la source
$i
pour$j
ne rien faire). Au lieu de cela, j'ai inséré la conversion du nom de fichier en minuscules au début et j'ai pris la liberté d'ajouter cela comme une autre option (qui fonctionnait au moins pour moi) à la fin de votre réponse afin que je puisse accepter votre réponse. Bien sûr, vous pouvez modifier davantage votre réponse à votre guise.J'avais besoin de renommer mes photos et j'ai trouvé cette question ici - je viens de découvrir que
exiftool
cela la gère nativement:De http://www.sno.phy.queensu.ca/~phil/exiftool/filename.html
Si vous souhaitez garder une trace du nom de fichier d'origine et écrire l'extension en minuscules:
La même chose fonctionne également avec le nom de fichier entier en minuscules:
la source
Je sais que vous avez dit que vous préfériez un script, cependant, si vous êtes ouvert à une application Java gratuite, vous pouvez utiliser AmoK Exif Sorter
la source
J'utiliserais
krename
pour ça. Illa 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 des 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