Forum Linux.débutant Pourquoi il marche pas mon script ?

Posté par  .
Étiquettes : aucune
0
17
mar.
2006
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  . Évalué à 0.

    il me semble que c'est
    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: Pourquoi il marche pas mon script ?

    Posté par  . Évalué à 1.

    Le '*.*' est voulu ou c'est un héritage du DOS ? Cette forme exclut les fichiers qui n'ont pas de point dans leurs noms. Pour sélectionner tous les fichiers, c'est '*'.

    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.