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 08/01/2017, à 02: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, à 23:52)

Hors ligne

#2 Le 08/01/2017, à 04: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 sad

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, à 07: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, à 10:10)

Hors ligne

#4 Le 08/01/2017, à 09: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, à 18:40)

Hors ligne

#5 Le 08/01/2017, à 10: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, à 18:09

Steemo

Re : [Résolu] Renommer tous les fichiers/dossiers d'une arborescence

Bonjour,
Tout d'abord merci à tous pour votre aide wink
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,

MicP a écrit :

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, à 18:10)

Hors ligne

#7 Le 08/01/2017, à 18:38

pingouinux

Re : [Résolu] Renommer tous les fichiers/dossiers d'une arborescence

Steemo #6 a écrit :

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… sad

Dernière modification par pingouinux (Le 08/01/2017, à 18:41)

Hors ligne

#8 Le 08/01/2017, à 23:51

Steemo

Re : [Résolu] Renommer tous les fichiers/dossiers d'une arborescence

C'est parfait !
Merci beaucoup pour ton aide wink

Bonne soirée smile

Hors ligne