GNU/Linux >> Tutoriels Linux >  >> Linux

linux-shell :renommer les fichiers à l'heure de création

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 indique date pour afficher la date du fichier plutôt que la date actuelle. La spécification +"%Y%m%d_%H%M%S" dit date 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.


Linux
  1. Comment rechercher et trier des fichiers en fonction de la date et de l'heure de modification sous Linux

  2. Rechercher et trier des fichiers en fonction de l'accès, de la date et de l'heure de modification sous Linux

  3. Commande pour obtenir le temps en millisecondes

  4. Rechercher des fichiers créés entre une plage de dates

  5. Linux renommer les fichiers en majuscules

Créer des répertoires ou des fichiers nommés avec la date/l'heure/le mois/l'année actuels

Comment définir la date, l'heure et le fuseau horaire dans RHEL 8

11 Exemples de commandes de date Linux utiles

Comment définir la date et l'heure sous Linux

L'indicateur de temps n'affiche pas la date/l'heure ?

Linux date Exemples de commandes