#1 Le 08/01/2017, à 01:35
- Steemo
[Résolu] Renommer tous les fichiers/dossiers d'une arborescence
Bonjour/bonsoir,
Après de nombreuses tentatives et recherches, je n'arrive pas à faire un script fonctionnel. Alors voilà, j'essaye de faire un script qui renomme tous mes fichiers/dossiers qui se trouvent dans tel dossier mais d'une certaine façon. La façon est la suivante: je veux remplacer TOUS les caractères saufs de a à z (minuscule) par un underscore. C'est à dire que "A" "é" "8" etc doivent être remplacé par un underscore. Alors je me suis dis qu'au lieu de lister tous les caractères possibles, il faudrait dire "renomme tous les caractères saufs de a à z par des underscores. J'ai donc essayé avec la commande "rename", par exemple, pour remplacer toutes les lettres majuscules par un underderscore récursivement, voici ce que j'ai fais: find | rename 's/[A-Z]/_'
Malheureusement je n'arrive pas plusieurs choses:
- Renommer tous les caractères d'un coup (car quand je fais la commande précédente, ça renomme que le premier caractère qui est trouvé. Ex: "ABCD.txt" -> "_BCD.txt")
- Renommer en plus de ça récursivement (mon find n'a pas l'air de fonctionner)
- Et dire "je renomme tout sauf [a-z]"
À noter que je suis plutôt un débutant, ce que je fais me paraît pour le moment assez compliqué.
J'espère avoir été assez précis pour que vous ayez compris mon problème.
Je vous remercie d'avance,
Bonne journée
Steemo - Étudiant à Laval
Dernière modification par Steemo (Le 08/01/2017, à 22:52)
Hors ligne
#2 Le 08/01/2017, à 03:16
- cqfd93
Re : [Résolu] Renommer tous les fichiers/dossiers d'une arborescence
Bonjour,
J'ai bricolé quelques essais et j'ai réussi à trouver quelque chose qui ne fait pas exactement ce que tu veux mais ça peut te mettre sur la voie :
rename -n 'y/[^a-f]+/_/' *
J'ai mis l'argument -n pour faire juste une simulation.
Avec y au lieu de s, ça remplace toutes les occurrences trouvées et si j'ai bien compris, [^a-f]+ signifie « au moins une fois un caractère ne se trouvant pas dans la plage a-f ». Seul problème : ça ne traduit que les caractères alphabétiques
Je ne suis pas du tout experte en syntaxe perlexpr mais ça m'intéresse alors quand je peux essayer de bidouiller…
− cqfd93 −
Hors ligne
#3 Le 08/01/2017, à 06:08
- MicP
Re : [Résolu] Renommer tous les fichiers/dossiers d'une arborescence
EDIT : Passer directement au message de pingouinux
Bonjour Steemo et cqfd93
@Steemo
mv $nomFich $(echo $nomFich | sed 's/[^abcdefghijklmnopqrstuvwxyz]/_/g')
permettra de renommer le fichier dont le nom est contenu dans la variable nomFich
Par contre, il faudra faire attention car deux fichiers de noms différents risquent d'être renommés avec le même nom,
et comme deux fichiers du même répertoire ne peuvent avoir le même nom, ça risque très fort de coincer.
Dernière modification par MicP (Le 08/01/2017, à 09:10)
Hors ligne
#4 Le 08/01/2017, à 08:46
- pingouinux
Re : [Résolu] Renommer tous les fichiers/dossiers d'une arborescence
Bonjour,
Tu te places dans le répertoire de départ, et tu essayes ceci
find -depth -execdir rename -n 's/[^a-z]/_/g' {} \;
Il ne reste plus qu'à enlever -n si c'est bon.
rename te prévient si tu obtiens des noms identiques.
Édité :
Commande corrigée suite à la remarque de Steemo en #6
find -depth -execdir rename -n 's#[^a-z./]#_#g' {} \;
Dernière modification par pingouinux (Le 08/01/2017, à 17:40)
Hors ligne
#5 Le 08/01/2017, à 09:08
- MicP
Re : [Résolu] Renommer tous les fichiers/dossiers d'une arborescence
Bonjour
Laissez tomber ma proposition car celle de pingouinux est bien meilleure que la mienne.
Hors ligne
#6 Le 08/01/2017, à 17:09
- Steemo
Re : [Résolu] Renommer tous les fichiers/dossiers d'une arborescence
Bonjour,
Tout d'abord merci à tous pour votre aide
Ta proposition pingouinux marche quasiment. Je t'avoue que je n'ai pas compris ce que tu as fais mais ça a l'air de fonctionner à une seule exception, le script rajoute deux "_" devant chaque fichier/dossier (ex: "test5" -> "__test_"). Je t'avoue que je ne comprends pas pourquoi mais je vais chercher de mon côté.
Ensuite MicP,
Par contre, il faudra faire attention car deux fichiers de noms différents risquent d'être renommés avec le même nom,
et comme deux fichiers du même répertoire ne peuvent avoir le même nom, ça risque très fort de coincer.
Je viens de tester, il s'avère que si deux fichiers vont être renommés avec le même nom, alors un des deux ne sera pas renommé.
Merci d'avance pour votre aide,
Bonne fin de journée
Dernière modification par Steemo (Le 08/01/2017, à 17:10)
Hors ligne
#7 Le 08/01/2017, à 17:38
- pingouinux
Re : [Résolu] Renommer tous les fichiers/dossiers d'une arborescence
le script rajoute deux "_" devant chaque fichier/dossier (ex: "test5" -> "__test_")
C'est parce que le nom de fichier apparaît ainsi ./nom_du_fichier, et que les caractères ./ sont remplacés aussi.
Essaye ceci (mais aucun point dans le nom des fichiers ne sera remplacé) :
find -depth -execdir rename -n 's#[^a-z./]#_#g' {} \;
Désolé pour cette erreur…
Dernière modification par pingouinux (Le 08/01/2017, à 17:41)
Hors ligne
#8 Le 08/01/2017, à 22:51
- Steemo
Re : [Résolu] Renommer tous les fichiers/dossiers d'une arborescence
C'est parfait !
Merci beaucoup pour ton aide
Bonne soirée
Hors ligne