Bon matin tout le monde,
pour un site Web, je voudrais renommer les fichiers (images) dans un dossier de "1.jpg, 2.jpg, 3.jpg ..." à "aaaammjj_hhmmss.jpg" - je voudrais donc lire la création fois un ensemble cette fois comme noms pour les images. Quelqu'un a-t-il une idée de comment faire cela, par exemple avec Linux-Shell ou avec imagemagick?
Je vous remercie!
Dans le shell Linux:
for f in *.jpg
do
mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"
done
Explication :
for f in *.jpg
do
Cela démarre la boucle sur tous les fichiers JPEG. Une caractéristique de cela est qu'il fonctionnera avec tous les noms de fichiers, même ceux avec des espaces, des tabulations ou d'autres caractères difficiles dans les noms.
mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"
Ceci renomme le fichier. Il utilise l'option -r
qui indique à date
d'afficher la date du fichier plutôt que la date actuelle. La spécification +"%Y%m%d_%H%M%S"
indique à date
de le formater comme vous l'avez spécifié.
Le nom du fichier, $f
, est placé entre guillemets partout où il est utilisé. Cela garantit que les noms de fichiers impairs ne causeront pas d'erreurs.
L'option -n
de mv
indique à move de ne jamais écraser un fichier existant.
done
Ceci termine la boucle.
Pour une utilisation interactive, vous préférerez peut-être que la commande soit sur une seule ligne. Dans ce cas, utilisez:
for f in *.jpg; do mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"; done
Pour nommer le fichier en fonction de la date de création EXIF (au lieu de la date du système de fichiers), nous avons besoin de exiftool
ou son équivalent:
for f in *.jpg
do
mv -n "$f" "$(exiftool -d "%Y%m%d_%H%M%S" -CreateDate "$f" | awk '{print $4".jpg"}')"
done
Explication :
Ce qui précède est assez similaire aux commandes pour la date du fichier, mais avec l'utilisation de exiftool
et awk
pour extraire l'image EXIF Date de création.
La commande exiftool
fournit la date dans un format tel que:
$ exiftool -d "%Y%m%d_%H%M%S" -CreateDate sample.jpg
Create Date : 20121027_181338
La date réelle que nous voulons est le quatrième champ de la sortie.
Nous passons la sortie exiftool
à awk
afin qu’elle puisse extraire le champ que nous voulons:
awk '{print $4".jpg"}'
Cela sélectionne le champ de date et ajoute également l'extension .jpg
.
Essaye ça
for file in `ls -1 *.jpg`; do name=`stat -c %y $file | awk -F"." '{ print $1 }' | sed -e "s/\-//g" -e "s/\://g" -e "s/[ ]/_/g"`.jpg; mv $file $name; done
Bien qu'il puisse y avoir un moyen plus facile.