Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 22/12/2024, à 15:22

ettoremajorana

renommage de fichiers

Bonjour,

Je souhaite renommer des fichiers ainsi :
nom initial : chapitre02_nom_du_fichier.jpg
nom final : chapitre01_20241222_nom_du_fichier.jpg

Il y a juste un numéro à changer et une date à introduire. Tous les fichiers sont dans le même répertoire et je souhaite juste qu'ils restent dans le même répertoire.
remarque : je ne mets jamais d'espace dans le nom de mes fichiers. Et ce ne sont que des fichiers jpg.

Le problème est que je souhaite faire ce changement sur un nombre parfois important de fichiers (parfois 50). Et comme c'est assez rébarbatif, j'ai pensé qu'il doit exister une procédure pour le faire de manière automatique.

Merci de votre aide.

Dernière modification par ettoremajorana (Le 22/12/2024, à 15:22)

Hors ligne

#2 Le 23/12/2024, à 05:27

Tawal

Re : renommage de fichiers

Hello,

Je vois cela en plusieurs étapes :
   - Récupérer le nombre à modifier
   - Modifier ce nombre et le stocker avec 2 digits dans une variable
   - Renommer le fichier
Le tout dans une boucle.

Je vais supposer que tous les fichiers à renommer commencent par "chapitre".

shopt -s nullglob extglob
for f in /chemin/du/répertoire/chapitre*.jpg
do
   [[ $f =~ chapitre([0-9]+)_(.*)$ ]]
   nb_ori="${BASH_REMATCH[1]}"
   f_name="${BASH_REMATCH[2]}"
   nb_mod="$(printf "%02d" $((nb_ori+1)))"
   echo mv "$f" chapitre"$nb_mod"_"$(date "+%Y%m%d")"_"$f_name"
done

J'ai mis un echo devant la commande mv.
Cela permet de vérifier si les commandes "mv" sont correctes.
Si oui, enlever le echo et recommencer.

Dernière modification par Tawal (Le 23/12/2024, à 09:06)


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#3 Le 23/12/2024, à 06:14

Watael

Re : renommage de fichiers

nb_ori - 1 : chap02 -> chap01
et je ne suis pas certain qu'arrivé au chap08 ça fonctionne encore.

#!/bin/bash

shopt -s nullglob

dir=/chemin/repertoire
printf -v date '%(%Y%m%d)T' -1

for f in "$dir"/chapitre02_*.jpg
do
    echo mv "$f" "$dir/chapitre01_${date}_${f#*_}"
done

Dernière modification par Watael (Le 23/12/2024, à 06:15)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#4 Le 23/12/2024, à 07:43

serged

Re : renommage de fichiers

Voir Comment effectuer des traitements par lot dans la doc.
Il existe aussi des logiciels graphiques comme gprename


LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne

#5 Le 23/12/2024, à 09:10

Tawal

Re : renommage de fichiers

@Watael : non ,c'est bien nb_ori - 1. On passe de 02 à 01.
Par contre, tu as raison, cela ne fonctionne plus à partir de 08.
Ta proposition ne traite qu'un seul chapitre, il faut relancer pour chaque chapitre.

Voici ma proposition globale revue et corrigée :

#!/bin/bash

dir=/chemin/repertoire
shopt -s nullglob extglob

for f in "$dir"/chapitre*.jpg
do
   [[ $f =~ chapitre([0-9]+) ]]

   nb="${BASH_REMATCH[1]#*0}"
   printf -v mod '%02d_%(%Y%m%d)T' $((nb-1))

   echo mv "$f" "$dir"/chapitre"$mod"_"${f#*_}"
done

Edit: Mise à jour du code, il y avait 1-2 erreurs.

Dernière modification par Tawal (Le 23/12/2024, à 17:56)


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#6 Le 23/12/2024, à 17:20

ettoremajorana

Re : renommage de fichiers

OK. Merci à @Tawal, et @Watael, mais ces instructions, où faut-il les écrire ? Directement dans le terminal ? Ou alors dois-je créer un fichier avec une certaine extension ? Et si oui, quelle extension ?
avec quel programme (Emacs ?) ?

Dernière modification par ettoremajorana (Le 23/12/2024, à 17:39)

Hors ligne

#7 Le 23/12/2024, à 18:04

Watael

Re : renommage de fichiers

Tawal a écrit :

Ta proposition ne traite qu'un seul chapitre, il faut relancer pour chaque chapitre.

il n'est pas dit qu'il y a d'autres chapitres que le chapitre02. tongue

ps:
$f ne commencera jamais par chapitre, mais par /chemin/repertoire/chapitre wink


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#8 Le 23/12/2024, à 18:05

Tawal

Re : renommage de fichiers

@ettoremajorana :
Tu copies les lignes dans un fichier texte avec le logiciel de ton choix.
Tu adaptes la ligne :

dir=/chemin/repertoire

en indiquant le répertoire où sont les fichiers à renommer.

Tu enregistres où tu veux et avec le nom que tu veux (peu importe l'extension).
Tu ouvres un terminal et tu te rends dans le répertoire où tu as sauvegardé le fichier texte (script bash).
Puis tu exécutes le script ainsi :

bash nom_du_fichier_texte

En l'état actuel, le script ne fait qu'afficher les commandes de "renommage" des fichiers.
Tu vérifies que les nouveaux noms soient bien corrects.
Si oui, tu enlèves dans le script le mot 'echo' devant la commande mv.
Tu sauvegardes et tu relances le script avec la même méthode.

PS: J'ai édité mon message précédent pour corriger le script qui comportait des erreurs.

Dernière modification par Tawal (Le 23/12/2024, à 18:42)


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#9 Le 23/12/2024, à 18:36

Tawal

Re : renommage de fichiers

Je reposte ici une version revue :

#!/bin/bash

dir=/chemin/repertoire
shopt -s nullglob extglob

for f in "$dir"/chapitre*.jpg
do
   [[ $f =~ chapitre([0-9]+) ]]
   nb="${BASH_REMATCH[1]#*0}"
   printf -v mod '%02d_%(%Y%m%d)T' $((nb-1))

   echo mv "$f" "$dir"/chapitre"$mod"_"${f#$dir/*_}"
done

Dernière modification par Tawal (Le 23/12/2024, à 18:38)


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#10 Le 23/12/2024, à 18:41

Watael

Re : renommage de fichiers

   echo mv "$f" "$dir/chapitre${mod}_${f#$dir/*_}"

plus davantage d'accolades (pour une fois elles sont bienvenues), moins de "gui"lle"mets". wink

Dernière modification par Watael (Le 23/12/2024, à 20:29)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#11 Le 23/12/2024, à 18:56

Tawal

Re : renommage de fichiers

J'ai hésité roll


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#12 Le 02/01/2025, à 11:10

sputnick

Re : renommage de fichiers

Avec la commande rename:

$ rename -n 's/^(\w+)(\d+)(_.*)/$1 . ($2-1) . "_" . qx(date +%Y%m%d | tr -d "\n") . $3/e' chapitre02_nom_du_fichier.jpg 
rename(chapitre02_nom_du_fichier.jpg, chapitre01_20250102_nom_du_fichier.jpg)

Retirer -n pour renommer en vrai.


Qui veut faire quelque chose trouve un moyen, qui ne veut rien faire trouve une excuse. Proverbe arabe
https://sputnick.fr

Hors ligne