3 votes

Renommer les noms de fichier dans le répertoire avec l'horodatage de création en précision des secondes

Y a-t-il un moyen facile de le faire pour les fichiers dans un répertoire particulier - que leurs noms soient renommés en fonction de l'horodatage du fichier, avec une précision au niveau des secondes

Clarification:

Par exemple, supposons qu'un répertoire (Mac 10.14.15) contient les fichiers suivants, où la notation ci-dessous montre le nom de fichier d'origine et l'heure de création du fichier. (Mais, pour être clair, nous travaillons à partir du répertoire de fichiers Mac, et non pas à partir du luxe de simplement analyser un fichier texte.) Les noms de fichiers sont des noms de 36 caractères uuid:

35eafb32-8005-11e9-bc42-526af7764f64.png 09:35:01
419f0eb4-8005-11e9-bc42-526af7764f64.png 09:35:11
43249984-8005-11e9-bc42-526af7764f64.png 21:02:03

Supposons que je veuille renommer les fichiers en fonction de l'horodatage (de création d'origine), mais le nom de fichier doit bien sûr être dans un format acceptable:

prepend-09\_35\_01.png
prepend-09\_35\_11.png
prepend-21\_02\_03.png

(Dans le cas réel, le répertoire contient plus de 2000 fichiers. Si cela a de l'importance, ils sont transportés à partir d'une application iPhone X que j'ai créée - via le partage de fichiers iTunes. La date et l'heure de création du fichier s'affichent correctement sur Mac lorsqu'elles sont transférées.)

7voto

user3439894 Points 52496

Si tous les fichiers sont dans le même répertoire, alors dans Terminal, changez de répertoire, par exemple
cd /chemin/vers/dossier puis utilisez la commande composite suivante :

for f in *.*; do echo mv -n "$f" "${f%.*}-$(stat -f'%SB' -t "%H_%M_%S" "$f").${f##*.}"; done

Note : Il y a une echo commande intentionnelle qui est là pour que vous testiez, et elle affichera seulement la mv commande pour vous permettre de voir si c'est le résultat souhaité. Vous pouvez alors l'exécuter à nouveau en supprimant juste echo de la commande composite pour renommer réellement les fichiers comme souhaité via la mv commande.

Exemple :

$ touch 35eafb32-8005-11e9-bc42-526af7764f64.png 419f0eb4-8005-11e9-bc42-526af7764f64.png 43249984-8005-11e9-bc42-526af7764f64.png
$
$ ls -1
35eafb32-8005-11e9-bc42-526af7764f64.png
419f0eb4-8005-11e9-bc42-526af7764f64.png
43249984-8005-11e9-bc42-526af7764f64.png
$
$ for f in *.*; do echo mv -n "$f" "${f%.*}-$(stat -f'%SB' -t "%H_%M_%S" "$f").${f##*.}"; done
mv -n 35eafb32-8005-11e9-bc42-526af7764f64.png 35eafb32-8005-11e9-bc42-526af7764f64-19_56_35.png
mv -n 419f0eb4-8005-11e9-bc42-526af7764f64.png 419f0eb4-8005-11e9-bc42-526af7764f64-19_56_35.png
mv -n 43249984-8005-11e9-bc42-526af7764f64.png 43249984-8005-11e9-bc42-526af7764f64-19_56_35.png
$
$ for f in *.*; do mv -n "$f" "${f%.*}-$(stat -f'%SB' -t "%H_%M_%S" "$f").${f##*.}"; done
$
$ ls -1
35eafb32-8005-11e9-bc42-526af7764f64-19_56_35.png
419f0eb4-8005-11e9-bc42-526af7764f64-19_56_35.png
43249984-8005-11e9-bc42-526af7764f64-19_56_35.png
$ 

Comprendre la bash commande composite:

  • for f in *.*; do ...; done    Pour chaque fichier dans le répertoire actuel, faites les commandes suivantes.
  • echo    Affiche ce qui suit. (Doit être supprimé pour que la mv commande fonctionne réellement.)
  • mv -n source target    Déplacer les fichiers, ne pas écraser un fichier existant, nom du fichier, nouveau nom de fichier.
    • "$f"    Le nom de fichier source.
    • "${f%.*}-$(stat -f'%SB' -t "%H_%M_%S" "$f").${f##*.}"    Le nom de fichier cible.
    • ${f%.*}    Partie du nom du fichier sans l'extension. Voir Expansion de Paramètre dans la page de manuel de bash.
    • -    Le caractère TIRET-MOINS.
    • $(...)    Substitution de Commande, permet à la sortie d'une commande de remplacer le nom de commande.
    • stat -f'%SB' -t "%H_%M_%S" "$f"
    • stat    Affiche le statut du fichier. Voir sa page de manuel pour plus de détails.
    • -f'%SB'    f format    Affiche les informations en utilisant le format spécifié. Voir la section FORMATS pour une description des formats valides. Dans ce cas, %SB représente la sortie de chaîne de l'heure de création de l'inode. (L'heure à laquelle le fichier a été créé.)
    • -t "%H_%M_%S"    t timefmt    Afficher les horodatages en utilisant le format spécifié. Ce format est passé directement à strftime(3). Dans ce cas, il représente l'heure, un caractère LOW LINE (alias underscore), la minute, un caractère LOW LINE, la seconde.
    • %H    Est remplacé par l'heure en nombre décimal (00-23).
    • %M    Est remplacé par la minute en nombre décimal (00-59).
    • %S    Est remplacé par la seconde en nombre décimal (00-60).
    • "$f"    Le nom de fichier source.
    • .    Le caractère POINT. (Alias point ou période.)
    • ${f##*.}    La partie extension du nom de fichier. Voir Expansion de Paramètre dans la page de manuel de bash.

Notez que les noms de caractères en majuscules sont ceux qui apparaissent dans l'Afficheur de Caractères sur une installation en anglais américain de macOS.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X