Merci à @John1024 !
J'avais besoin de renommer des fichiers avec différentes extensions en même temps, selon la date de dernière modification :
for f in *; do
fn=$(basename "$f")
mv "$fn" "$(date -r "$f" +"%Y-%m-%d_%H-%M-%S")_$fn"
done
"DSC_0189.JPG" ➜ "2016-02-21_18-22-15_DSC_0189.JPG"
"MOV_0131.avi" ➜ "2016-01-01_20-30-31_MOV_0131.avi"
Si vous ne souhaitez pas conserver le nom de fichier d'origine :
mv "$fn" "$(date -r "$pathAndFileName" +"%Y-%m-%d_%H-%M-%S")"
J'espère que ça aidera les noobs comme moi !
Nommage basé sur la date du système de fichiers
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 doCela démarre la boucle sur tous les fichiers jpeg. Une caractéristique de ceci 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"Cela renomme le fichier. Il utilise le
-roption qui indiquedatepour afficher la date du fichier plutôt que la date actuelle. La spécification+"%Y%m%d_%H%M%S"ditdatepour 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.Le
-noption àmvdit à move de ne jamais écraser un fichier existant. -
doneCeci 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
Nommage basé sur la date de création EXIF
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 é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.
-
Le
exiftoolLa commande fournit la date dans un format tel que :$ exiftool -d "%Y%m%d_%H%M%S" -CreateDate sample.jpg Create Date : 20121027_181338La date réelle que nous voulons est le quatrième champ de la sortie.
-
Nous passons le
exiftoolsortie àawkpour qu'il puisse extraire le champ que nous voulons :awk '{print $4".jpg"}'Cela sélectionne le champ de date et ajoute également le
.jpgextension.
Essayez ceci
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 simple.