Pages : 1
#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
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.
ps:
$f ne commencera jamais par chapitre, mais par /chemin/repertoire/chapitre
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".
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é
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
Pages : 1