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 do
Cela 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
-r
option qui indiquedate
pour afficher la date du fichier plutôt que la date actuelle. La spécification+"%Y%m%d_%H%M%S"
ditdate
pour 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
-n
option àmv
dit à 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
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
exiftool
La commande 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 le
exiftool
sortie àawk
pour qu'il puisse extraire le champ que nous voulons :awk '{print $4".jpg"}'
Cela sélectionne le champ de date et ajoute également le
.jpg
extension.
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.