Forum Programmation.shell Remplacement de fichiers

Posté par  .
Étiquettes : aucune
0
4
fév.
2008
bonjour,
je cherche a creer un bash qui permet de remplacer un fichier par un autre dans l'arborescence d'un dossier, cela revient a chercher toutes les occurances pour un nom de fichier donné, exemple "monfichier.txt et le remplacer par "montexte.txt".

merci d'avance
  • # Exemple de script

    Posté par  . Évalué à 1.

    #!/bin/bash
    for fic in `ls *fichier*`
    do
    nouveau_nom=`echo $fic | sed s/fichier/texte/`
    echo mv $fic $nouveau_nom
    done



    Dans cet exemple j'utilise echo pour faire la simulation du mv
    Il suffit d'enlever le echo pour réaliser l'execution du mv
    • [^] # Re: Exemple de script

      Posté par  . Évalué à 1.

      ouhla merci mais y faut un peu me le decomposer :)

      in 'ls *fichier*' ca correspond au nom du fichier recherché?
      sed s/fichier/texte/, c'est un chemin de quoi?
      • [^] # Re: Exemple de script commenté

        Posté par  . Évalué à 1.

        ls *fichier* ::= liste des fichiers dont le nom contient la sous-chaîne fichier

        for fic in `ls *fichier*` ::= boucle sur le résultat de ls donc tous les noms désirés


        sed s/fichier/texte/ :: remplacement de la sous-chaîne 'fichier' par 'texte'


        voir man ls
        voir man sed
    • [^] # Re: Exemple de script

      Posté par  (site web personnel) . Évalué à 2.

      Tu n'as pas compris son problème: là tu ne fais que renommer tous les fichiers qui s'appellent "monfichier.txt" en "montexte.txt". Ce n'est pas du tout ce qu'il veut. En plus tu ne cherches pas dans une arborescence, mais juste dans un seul répertoire.
      • [^] # Re: Exemple de script

        Posté par  . Évalué à 2.

        Et en plus il lance les commandes ls et sed pour rien. bash fait très bien tout ça sans aide extérieure.
  • # J'ai bon ?

    Posté par  (site web personnel) . Évalué à 6.

    find . -name monfichier.txt -exec cp montexte.txt {} \;
    • [^] # Re: J'ai bon ?

      Posté par  (site web personnel) . Évalué à 0.

      je dirais plutôt (en reprenant la 1ere réponse)

      #!/bin/bash
      for fic in `find . -name monfichier.txt`
      do
      nouveau_nom=`echo $fic | sed s/fichier/texte/`
      echo mv $fic $nouveau_nom
      done

      Mais je n'ai peut être pas compris ce que tu voulais!

Suivre le flux des commentaires

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