Renommer des fichiers dans des sous-dossiers
Résolu
Ssylvainsab
Messages postés
2884
Date d'inscription
Statut
Modérateur
Dernière intervention
-
Ssylvainsab Messages postés 2884 Date d'inscription Statut Modérateur Dernière intervention -
Ssylvainsab Messages postés 2884 Date d'inscription Statut Modérateur Dernière intervention -
Bonsoir.
Sous Linux (Ubuntu pour être plus précis), j'aimerais renommer des photos en utilisant la date et l'heure de création contenue dans les informations exifs. J'ai trouvé un petit logiciel très bien, exiv2, qui permet (entre autres) de renommer des photos en utilisant les infos exif. Seulement, il ne permet pas de parcourir plusieurs répertoires.
Je cherche donc de quoi faire une boucle, qui listerait un par un les emplacements des fichiers, pour exploiter ces emplacements avec exiv2.
Je crois que la commande ls permet de faire une boucle, mais je ne trouve pas comment faire précisément.
Quelqu'un a-t-il une solution ?
Merci.
--
Sylvain
P.S.: J'ai aussi cherché à utiliser Krename, python... mais ils ne m'ont pas aidé.
Sous Linux (Ubuntu pour être plus précis), j'aimerais renommer des photos en utilisant la date et l'heure de création contenue dans les informations exifs. J'ai trouvé un petit logiciel très bien, exiv2, qui permet (entre autres) de renommer des photos en utilisant les infos exif. Seulement, il ne permet pas de parcourir plusieurs répertoires.
Je cherche donc de quoi faire une boucle, qui listerait un par un les emplacements des fichiers, pour exploiter ces emplacements avec exiv2.
Je crois que la commande ls permet de faire une boucle, mais je ne trouve pas comment faire précisément.
Quelqu'un a-t-il une solution ?
Merci.
--
Sylvain
P.S.: J'ai aussi cherché à utiliser Krename, python... mais ils ne m'ont pas aidé.
A voir également:
- Renommer des fichiers dans des sous-dossiers
- Renommer des fichiers en masse - Guide
- Renommer iphone - Guide
- Lire des fichiers epub - Guide
- Comment renommer quelqu'un sur instagram - Guide
- Gestion des fichiers - Télécharger - Gestion de fichiers
8 réponses
Salut,
Normalement pour faire une recherche récursive selon certains critères et exécuter une commande derrière on utilise "find" couplé à "exec" :
Donne_moi la syntaxe que tu utilises pour renommer tes fichiers afin d'essayer d'adapter la commande à ton cas.
;-))
Normalement pour faire une recherche récursive selon certains critères et exécuter une commande derrière on utilise "find" couplé à "exec" :
find /home -name "fichier" -type f -exec mv {} /rep/destination/ \;Mais dans ton cas ça risque de ne pas le faire.
Donne_moi la syntaxe que tu utilises pour renommer tes fichiers afin d'essayer d'adapter la commande à ton cas.
;-))
Merci.
Tout d'abord, mes fichiers sont dans plusieurs sous dossiers de "/home/sylvain/Bureau/Mes images/Photos".
Il sont tous nommés comme ceci : P[numéro du mois][numéro du jour][numéro de la photo].JPG
Exemple : P9060001.JPG, pour la première photo que j'ai prise le 6 septembre.
Par contre, si le numéro du mois est à deux chiffres, c'est une lettre :
janvier : 1
février : 2
...
septembre : 9
octobre : A
novembre : B
décembre : C
Donc par exemple PC250035.JPG, pour la 35° photo prise le 25 décembre.
Ensuite, la syntaxe que j'utilise pour renommer un fichier avec exiv2 :
exiv2 -r %Y-%B-%d--%HH%M mv "/home/sylvain/Bureau/Mes images/Photos/........../P........JPG"
Voici quelques extraits de man exiv2 :
J'utilise donc l'option -r pour spécifier le format du nom du fichier renommé via l'action mv, et %[caractère] pour exporter l'année, l'heure...
L'année correspond à Y, le mois à m, le numéro du jour à d, leure à H, la minute à M et la seconde à S.
Tout d'abord, mes fichiers sont dans plusieurs sous dossiers de "/home/sylvain/Bureau/Mes images/Photos".
Il sont tous nommés comme ceci : P[numéro du mois][numéro du jour][numéro de la photo].JPG
Exemple : P9060001.JPG, pour la première photo que j'ai prise le 6 septembre.
Par contre, si le numéro du mois est à deux chiffres, c'est une lettre :
janvier : 1
février : 2
...
septembre : 9
octobre : A
novembre : B
décembre : C
Donc par exemple PC250035.JPG, pour la 35° photo prise le 25 décembre.
Ensuite, la syntaxe que j'utilise pour renommer un fichier avec exiv2 :
exiv2 -r %Y-%B-%d--%HH%M mv "/home/sylvain/Bureau/Mes images/Photos/........../P........JPG"
Voici quelques extraits de man exiv2 :
ACTIONS [...] mv | rename Rename files and/or set file timestamps according to the Exif create timestamp. Uses the value of tag Exif.Photo.DateTimeOriginal or, if not present, Exif.Image.DateTime to determine the timestamp. The filename format can be set with -r fmt, timestamp options are -t and -T. [...] OPTIONS [...] -r fmt Filename format for the ’rename’ action. The format string follows strftime(3) and supports the following keywords: :basename: - original filename without extension :dirname: - name of the directory holding the original file :parentname: - name of parent directory Default filename format is %Y%m%d_%H%M%S.
J'utilise donc l'option -r pour spécifier le format du nom du fichier renommé via l'action mv, et %[caractère] pour exporter l'année, l'heure...
L'année correspond à Y, le mois à m, le numéro du jour à d, leure à H, la minute à M et la seconde à S.
Pendant que tu répondais voilà ce que j'étais en train de tester :
[rep]$ tree . |-- FORMULE_1_036.jpg |-- FORMULE_1_037.jpg `-- rep1 |-- FORMULE_1_036.jpg |-- FORMULE_1_037.jpg `-- rep2 |-- FORMULE_1_036.jpg |-- FORMULE_1_037.jpg `-- rep3 |-- FORMULE_1_036.jpg |-- FORMULE_1_037.jpg `-- rep4 |-- FORMULE_1_036.jpg `-- FORMULE_1_037.jpg 4 directories, 10 files [rep]$ find . -name "*.jpg" -type f -exec exiv2 -r':basename:_%Y%m' rename {} \; [rep]$ tree . |-- FORMULE_1_036_200710.jpg |-- FORMULE_1_037_200710.jpg `-- rep1 |-- FORMULE_1_036_200710.jpg |-- FORMULE_1_037_200710.jpg `-- rep2 |-- FORMULE_1_036_200710.jpg |-- FORMULE_1_037_200710.jpg `-- rep3 |-- FORMULE_1_036_200710.jpg |-- FORMULE_1_037_200710.jpg `-- rep4 |-- FORMULE_1_036_200710.jpg `-- FORMULE_1_037_200710.jpg 4 directories, 10 files [rep]$Adapte à ton cas ;-))
je pense
find /home -iname "/home/sylvain/Bureau/Mes images/Photos/*.jpg" -type f -exec exiv2 -r %Y-%B-%d--%HH%M mv {} ;
find /home -iname "/home/sylvain/Bureau/Mes images/Photos/*.jpg" -type f -exec exiv2 -r %Y-%B-%d--%HH%M mv {} ;
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionfind /home/sylvain/Bureau/Mes\ images/Photos -iname "*.jpg" -type f -exec exiv2 -r '%Y-%B-%d--%HH%M' rename {} \;N'oublie pas le "\;" à la fin de l'expression.
Merci à tous les deux.
Pour le moment, voici l'expression que j'utilise :
sylvain@sylvain-ordiprincipal-ubuntu:~/Bureau/Mes images/Photos$ find . -iname "*.jpg" -exec exiv2 -r %Y-%m-%d--%HH%Mm%Ss.jpg mv {} +
D'après ce que j'en ai compris :
- find : trouve dans le dossier . (le dossier courant) les fichiers dont le nom correspond à *.jpg (* pour n'importe quel caractère) sans respecter la casse (iname), et pour chaque fichier exécute (-exec) la commande :
- exiv2 pour lire les informations exif et renommer le fichier avec en utilisant -r pour renommer avec le format %Y-%m...... et l'action mv pour renommer le fichier trouvé {}. + sert à finir -exec.
Mais je n'arrive pas à faire fonctionner cette commande. Tout semble marcher, sauf qu'une fois l'opération finie, rien n'est renommé, et parfois j'ai des erreurs du type :
exiv2: File `./dossier/dossier/0-00-00--00H0000s.jpg.JPG' exists. [O]verwrite, [r]ename or [s]kip?
Et quoi que je fasse, (O/r/s), je ne vois rien.
Il y a également comme problème le fait que l'extension .JPG soit gardée, mais je crois que c'est normal.
Et puis, il me suffira de répeter l'opération en utilisant -r :basename.
Peut-être que l'oubli du \; est une cause du problème. Je vais ré-essayer avec.
--
Sylvain
Pour le moment, voici l'expression que j'utilise :
sylvain@sylvain-ordiprincipal-ubuntu:~/Bureau/Mes images/Photos$ find . -iname "*.jpg" -exec exiv2 -r %Y-%m-%d--%HH%Mm%Ss.jpg mv {} +
D'après ce que j'en ai compris :
- find : trouve dans le dossier . (le dossier courant) les fichiers dont le nom correspond à *.jpg (* pour n'importe quel caractère) sans respecter la casse (iname), et pour chaque fichier exécute (-exec) la commande :
- exiv2 pour lire les informations exif et renommer le fichier avec en utilisant -r pour renommer avec le format %Y-%m...... et l'action mv pour renommer le fichier trouvé {}. + sert à finir -exec.
Mais je n'arrive pas à faire fonctionner cette commande. Tout semble marcher, sauf qu'une fois l'opération finie, rien n'est renommé, et parfois j'ai des erreurs du type :
exiv2: File `./dossier/dossier/0-00-00--00H0000s.jpg.JPG' exists. [O]verwrite, [r]ename or [s]kip?
Et quoi que je fasse, (O/r/s), je ne vois rien.
Il y a également comme problème le fait que l'extension .JPG soit gardée, mais je crois que c'est normal.
Et puis, il me suffira de répeter l'opération en utilisant -r :basename.
Peut-être que l'oubli du \; est une cause du problème. Je vais ré-essayer avec.
--
Sylvain
et parfois j'ai des erreurs du type :
exiv2: File `./dossier/dossier/0-00-00--00H0000s.jpg.JPG' exists. [O]verwrite, [r]ename or [s]kip?
Ben c'est normal si tu ne conserves rien de spécifique à chaque fichier, chaque fichier est renommé en un seul et unique nom à la seconde près. Vu la vitesse de traitement le 1er est renommé mais dans la foulée le second est renommé avec le même nom d'où la demande de confirmation, là les secondes s'écoulent un troisième est renommé mais ça bute sur le quatrième, etc., etc.
exiv2: File `./dossier/dossier/0-00-00--00H0000s.jpg.JPG' exists. [O]verwrite, [r]ename or [s]kip?
Ben c'est normal si tu ne conserves rien de spécifique à chaque fichier, chaque fichier est renommé en un seul et unique nom à la seconde près. Vu la vitesse de traitement le 1er est renommé mais dans la foulée le second est renommé avec le même nom d'où la demande de confirmation, là les secondes s'écoulent un troisième est renommé mais ça bute sur le quatrième, etc., etc.
Tu veux dire que les données exif seraient incomplètes ?
C'est parfois le cas, mais pas toujours.
Je recommencerais plus tard.
Sinon, pour l'histoire des fichiers non renommés, en fait c'est tout simple : j'avais mis le dossier dans la corbeille, en l'ayant copié au préalable, avant de renommer les fichiers. Les fichiers renommés étaient dans la corbeille, et pas dans le dossier copié (qui avait pourtant le même nom).
Cette commande marche : find . -iname "*.jpg" -exec exiv2 -r %Y-%m-%d--%HH%Mm%Ss.jpg mv {} \;
--
Sylvain
C'est parfois le cas, mais pas toujours.
Je recommencerais plus tard.
Sinon, pour l'histoire des fichiers non renommés, en fait c'est tout simple : j'avais mis le dossier dans la corbeille, en l'ayant copié au préalable, avant de renommer les fichiers. Les fichiers renommés étaient dans la corbeille, et pas dans le dossier copié (qui avait pourtant le même nom).
Cette commande marche : find . -iname "*.jpg" -exec exiv2 -r %Y-%m-%d--%HH%Mm%Ss.jpg mv {} \;
--
Sylvain