Forum Programmation.shell tester un script

Posté par  .
Étiquettes : aucune
0
14
sept.
2006
bonjour

j'ai moulte fichier dans plusieurs repertoires differents dans chaque repertoires le nom des fichiers par de toto001.pnm à toto299.pnm je voudrais tous les renommer dans un seul repertoire de 0001.pnm a 9999.pnm

petit schema:

/toto1/toto001.pnm jusqu'a toto299.pnm
/toto2/toto001.pnm jusqu'a toto299.pnm
etc...

MON PROBLEME:
j'ai trouvé une solution et je voudrais un petit truc qui me permette de verifier que mon script fonctionne correctement, genre il parse tout sans rien modifier et m'affiche ce qu il voudrais bien faire. Un controle avant passage dans la moulinette quoi.

mon petit script:

SEQ="00000000"; i=0; for f in $(find * -name "*.pnm"); do filename=${SEQ:${#i}}$i; echo $filename; ((i++)); done

merci
  • # a tester

    Posté par  . Évalué à 2.

    code original :

    SEQ="00000000";
    i=0;
    for f in $(find * -name "*.pnm");
    do filename=${SEQ:${#i}}$i;
    echo $filename;
    ((i++));
    done


    code modifié :
    tu rajoute un test pour une variable
    et en fonction de cette variable tu fais juste le echo

    il faudra surement adapter à ton langage...


    SEQ="00000000";
    i=0;
    for f in $(find * -name "*.pnm");
    do filename=${SEQ:${#i}}$i;
    if ($1==debug) echo $filename;
    if ($1!=debug) mv $i $filename;

    ((i++));
    done
    • [^] # Re: a tester

      Posté par  . Évalué à 2.

      merci beaucoup
      • [^] # Re: a tester

        Posté par  . Évalué à 1.

        et quand ton script est ok, tu le "pipes" dans un shell ( script|bash par ex)
        • [^] # Re: a tester

          Posté par  . Évalué à 1.

          raaaa, j'ai mal lu les modifs et je ne parle pas de la même chose,
          l'idée est de systématiquement ajouter un echo devant les commandes actives du script, de vérifier que ce sont les bonnes et d"envoyer la sortie vers un shell pour les exécuter.
          Pas tout à fait l'idée ci-dessus...
    • [^] # Re: a tester

      Posté par  . Évalué à 0.

      Une autre méthode, ma préférée en fait

      ls *.pnm|
      awk 'BEGIN {SEQ=0;}
      {printf "mv %s %06d.pnm", $1,SEQ; SEQ++}'


      Ensuite soit on redirige la sortie vers un fichier qu'on éxécutera après lecture, soit on éxécute directement en faire "pipe bash"

      ls *.pnm|
      awk 'BEGIN {SEQ=0;}
      {printf "mv %s %06d.pnm", $1,SEQ; SEQ++}'|bash

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.