[Script bash] Edition de nombreux fichiers.

Résolu
boulate Messages postés 14 Statut Membre -  
 Etienen -
Bonjour a tous !

Je dois, pour mon boulot, modifier un grand nombre de fichiers .bat sur un serveur. Je suis sous debian, et je souhaiterais creer un script pouvant faire cela à ma place.

En effet, j'ai plus de 500 fichiers à modifier de la sorte :

Ajouter en fin de fichier une ligne qui renseignerais le nom de fichier lui meme ... exemple :

Editer le fichier "Dupont.bat" et mettre à la fin de ce fichier : "ceci est à Dupont"
Editer le fichier "martin.bat" et mettre à la fin de ce fichier : "ceci est à Martin"
Editer le fichier "tartenpion.bat" et mettre à la fin de ce fichier : "ceci est à tartenpion"
etc...


Je ne sais pas comment entrer en variable le nom de chaque fichier que le script pourra ouvrir.

Ensuite, pour ajouter la ligne, ce serait du style :

echo "ceci est à $nom_du_fichier_sans_le_.bat" >> $nom_du_fichier

Mais pour le reste, je ne vois pas trop comment faire

Merci d'avance pour votre aide !
Configuration: Windows XP
Firefox 2.0

12 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Ben c'est juste une boucle for ?
    for x in `ls`; do echo "ceci est $x" >> $x ; done

    Bon il faut arranger deux trois choses notamment ça écrit ceci est dupont.bat mais c'est dans l'idée. De même si tu utilises un find au lieu d'un ls il faudra extraire le bon morceau (le nom du gars) du nom de fichier.

    Bonne chance
    0
  2. boulate Messages postés 14 Statut Membre
     
    C'est la que je bloque un petit peu ... comment supprimer ce satané .bat à la fin de ma ligne ... :(
    J'ai essayé avec cut, mais je n'arrive pas a avoir de résultat convaincant :(

    Merci en tout cas pour le début, tu m'as grandement aidé :D

    Juste une question : Le "for x" veut dire "pour tout" ?
    0
  3. bouks
     
    hummm...
    le problème c'est qu'il veut enlever l'extension .bat...
    une idée que je voie (surement bourrin) serait de mettre le listing un fichier temp , faire un sed dessus (enlevement des .bat)...
    puis apres refaire le echo en bouclant sur les lignes de fichier, cette fois ci sans l'extension .bat bien sur :)
    0
  4. boulate Messages postés 14 Statut Membre
     
    Est ce qu'on ne peut pas plus simplement creer une variable "nom" par exemple, qui serait :

    NOM='$x cut -.bat'

    Je mets "cut -.bat" car c'est la que je bloque ... quel outil utiliser pour supprimer ce ".bat" ... je ne sais pas ... mais c'est juste pour l'idée, on ne peux pas creer une nouvelle variable, et ensuite lui dire :

    echo $NOM ?
    0
    1. jisisv Messages postés 3678 Statut Modérateur 936
       
      Pas vraiment besoin d'utiliser cut (un processus à chaque fois)
      Un bonne lecture de man bash donne la solution
      johan@johan:~$ nomfic=patati.bat
      johan@johan:~$ echo ${nomfic%%.bat}
      patati
      

      Johan
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. boulate Messages postés 14 Statut Membre
     
    %% sert à supprimer ce qui suit ?
    0
  7. boulate Messages postés 14 Statut Membre
     
    Ouiiiiiiiiiiii, j'ai enfin trouvé !!!

    Voila comment j'ai fait :

    #! /bin/bash

    for x in `ls *.bat`;

    do
    NOM=`echo $x | cut -d . -f 1`
    echo "
    ceci est le fichier de $NOM" >> $x ;

    done


    Donc avec la base du fichier de la commande à mamiemando, et un coup de cut derriere, et c'est passé !!!
    Je suis trop content ... merci :D
    0
  8. boulate Messages postés 14 Statut Membre
     
    Bon, ben encore plus simple avec la solution de jisisv :

    #! /bin/bash

    for x in `ls *.bat`;

    do
    echo "
    ceci est le fichier de ${x%%.bat}" >> $x ;

    done


    Ca marche niquel, merci beaucoup !!!
    0
  9. boulate Messages postés 14 Statut Membre
     
    Personne n'a une idée ? :(
    0
    1. Etienen
       
      Tu devrais plutot utiliser basename pour virer le .bat a la fin de ton nom de fichier :

      basename toto.txt .txt : donne toto

      ++
      0
  10. boulate Messages postés 14 Statut Membre
     
    Je viens de trouver l'info (au cas ou un jour quelqu'un ai le meme pb que moi).

    Le signe \ en programmation signifie "ignorer le caractere suivant"

    donc, pour que ca marche, je dois mettre :
    net use f: \\\serveur\\repertoire_perso\\${x%%.bat}\\


    Voila, merci à tous pour votre aide, probleme reglé !
    0
  11. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    Le signe \ en programmation signifie "ignorer le caractere suivant"


    je dirai plutôt que le \ permet d'interpreter le caractère qui suit en tant que caractère littéral

    dans ton cas \$ interprète le $ en tant que caractère litteral au lieu de de dire
    \ - antislash
    ${x%%.bat} - contenu de la variable modifié selon le motif
    ce qu'on ne veut pas

    quand tu écrit \\${x%%.bat} en fait le antislash avant le $ est interprété en tant qu'antislash suis de la variable.
    0
  12. boulate Messages postés 14 Statut Membre
     
    Oki; merci pour cette précision lami20j :D
    0
  13. boulate Messages postés 14 Statut Membre
     
    et mince ... j'ai parlé trop vite ... ca marche avec la phrase "simple" de l'exemple ... mais pas avec la ligne de commande dans laquelle je dois integrer ma variable ...

    Je dois l'integrer dans une ligne tel que par exemple :
    net use f: \\serveur\repertoire_perso\${x%%.bat}\


    Apparement, il n'aime pas le "\" collé au "$" ... car si je mets un espace ca marche ...

    Comment passer outre ce probleme ?
    -1