Bonjour,
J'ai appris il y a 2 ou 3 jours à quoi sert un script et comment en faire un. (merci lea-linux). J'ai donc fait un script qui doit renommer tous les fichiers d'un dossier donné en remplacant les caractères accentués par les caractères basiques qui correspondent. Pour cela j'ai utilisé la commande rename que je maitrise (à peu près). Voici le-dit script :
#!/bin/sh
cd /home/zebulon/Desktop/accents;
rename 's/â/a/g' *.*
rename 's/ê/e/g' *.*
rename 's/ï/i/g' *.*
rename 's/ù/u/g' *.*
rename 's/Ã /a/g' *.*
rename 's/è/e/g' *.*
rename 's/ô/o/g' *.*
rename 's/ü/u/g' *.*
rename 's/ä/a/g' *.*
rename 's/ë/e/g' *.*
rename 's/ö/o/g' *.*
rename 's/é/e/g' *.*
rename 's/î/i/g' *.*
rename 's/û/u/g' *.*
rename 's/à/a/g' *.*
rename 's/â/a/g' *.*
rename 's/ä/a/g' *.*
rename 's/é/e/g' *.*
rename 's/è/e/g' *.*
rename 's/ê/e/g' *.*
rename 's/ë/e/g' *.*
rename 's/î/i/g' *.*
rename 's/ï/i/g' *.*
rename 's/ô/o/g' *.*
rename 's/ö/o/g' *.*
rename 's/ù/u/g' *.*
rename 's/û/u/g' *.*
rename 's/ü/u/g' *.*
##### liste des fichiers à renommer #####
#a_circonflexe â
#e_circonflexe ê
#i_trema ï
#u_grave ù
#a_grave Ã
#e_grave è
#o_circonflexe ô
#u_trema ü
#a_trema ä
#e_trema ë
#o_trema ö
#e_aigu é
#i_circonflexe î
#u_circonflexe û
Seulement voilà, ce script ne fait rien, mais absolument rien ! Même pas un message d'erreur : Rien.
Est ce que quelqu'un peut me dire où j'ai fauté ? Qu'est-ce que j'ai oublié ? Qu'est-ce qui est en trop ? Où ca coince ?
Je précise quand même que le script est executable (je suis pas si burne que ça)
Merci pour votre aide.
Rénald. (un mec qui un jour développera un truc que tout le monde utilisera sur la banquise. lol.)
# pour faire simpe...
Posté par NeoX . Évalué à 0.
rename <fichier_origine> <fichier_destination>
je suppose que tes fichiers contiennet des Ä, et d'autres caracteres...
genre mon_fichier_Âë_moi que tu veux renommer mon_fichier_A_moi
donc decomposons le probleme sous forme algorythmique (description du probleme en francais) :
---
debut du script
prendre la liste des fichiers presents dans le dossier et la mettre dans une LISTE
puis pour chaque fichier dans la LISTE
si le fichier contient une des chaines de caracteres
remplacer la chaine de caractere
renommer le fichier
sinon
laisser le fichier telquel
---
fin du script
du coup tu pourrais avoir 5 ou 200 fichiers ca change rien au script
reste plus qu'à le traduire en langage script, mais là j'ai pas de machine linux sous la main.
[^] # Re: pour faire simpe...
Posté par lcld . Évalué à 0.
man mv
# Re: Pourquoi il marche pas mon script ?
Posté par lcld . Évalué à 1.
rename 's/Ã /a/g' *.*
Attention, ce doit être un espace non sécable (0xA0).
Le plus sûr est de passer par la forme suivante :
rename 's/Ã\xA0/a/g' *
rename 's/à/a/g' *.*
rename 's/â/a/g' *.*
rename 's/ä/a/g' *.*
rename 's/é/e/g' *.*
rename 's/è/e/g' *.*
rename 's/ê/e/g' *.*
rename 's/ë/e/g' *.*
rename 's/î/i/g' *.*
rename 's/ï/i/g' *.*
rename 's/ô/o/g' *.*
rename 's/ö/o/g' *.*
rename 's/ù/u/g' *.*
rename 's/û/u/g' *.*
rename 's/ü/u/g' *.*
En terme d'efficacité, on repassera. Regarde du côté de la commande 'y' :
rename y/àâäéèêëîïôöùûü/aaaeeeeiioouuu/ *
Et concatène avec le reste :
rename 's/â/a/g; s/ê/e/g; ...; y/.../.../' *
Autre approche :
rename 's/Ã[¢ ¤]|[àâä]/a/g; s/Ã[ª¨«©]|[éèêë]/e/g; ...' *
En fait, je ne vois pas d'erreur.
A noter que si tout fonctionne correctement, il ne doit y avoir aucun message.
J'oublierais le script et simulerais l'exécution depuis la ligne de commande pour voir si chaque commande fonctionne comme prévu.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.