• # chmod +x

    Posté par  . Évalué à 6.

    en installant cygwin ;)
    • [^] # Re: chmod +x

      Posté par  . Évalué à 1.

      J'aimerai ne pas avoir à installer d'autres applicatifs.
      je pensai à créer un petit executable sous c# par exemple,mais je n'y connais rien.
  • # Python

    Posté par  . Évalué à 3.

    Pourquoi ne pas le réécrire en python ce qui lui permettrait, si tu n'utilises pas de modules spécifiques à une plateforme, de l'utiliser sur les deux environnements.

    En plus, le python, c'est bon ;)

    Guilhelm
    • [^] # Re: Python

      Posté par  . Évalué à 1.

      Tu peux m'expliquer comment je peux faire cela.
      • [^] # Re: Python

        Posté par  . Évalué à 3.

        1°) tu prends un editeur de texte (probablement le meme que celui avec tu ecris ton .sh)

        2°) tu reecris tout ce que fais ton script .sh en langage python

        3°) au besoin, il faudra peut-etre aller lire des manuels de python (comme tu l'aurais fait pour le c#)
        • [^] # Re: Python

          Posté par  . Évalué à 2.

          Ok merci pour l'info.
          Une fois que j'ai validé mon script je me penche la dessus.

          Tu peux peut etre m'aider mon script fait cela

          #!/bin/bash

          # je me positionne dans mon répertoire archives
          cd /Bureau/Linux/Test_Pano/archives/

          #je fais mon recherche remplace dans mon répertoire archives
          awk '{print "sed -i -e s/"$1"/"$2"/g *"}' references | sh

          Le remplacement se fait bien que lorsque je suis directement dans mon répertoire.
          Il ne veut pas aller se positionner de base avec la commande cd quand je me trouve sous test_pano. Tu peux me dire pourquoi.
          • [^] # Re: Python

            Posté par  . Évalué à 3.


            #!/bin/bash

            # je me positionne dans mon répertoire archives
            cd /Bureau/Linux/Test_Pano/archives/

            #je fais mon recherche remplace dans mon répertoire archives
            awk '{print "sed -i -e s/"$1"/"$2"/g *"}' references | sh


            "Convertir" un .sh en .exe ne peut être réalisé qu'en réécrivant le programme dans un langage de programmation portable sur les deux environnements.

            Là tu utilises des commandes "bash" qui n'existent pas sous windows (certaines ont toutefois des équivalent DOS comme "cd").

            Alors à part le réécrire dans un langage comme python... il n'y a pas à mon avis de possibilité d'en faire un .exe directement (ou alors il faudrait un .exe qui inclue les exécutables (compatibles windows) des commandes appelées... pas gagné gagné...)
            • [^] # Re: Python

              Posté par  . Évalué à 1.

              Je ne comprends pas pourquoi la commande awk ne se fait pas dans mes fichiers de sous répertoire.

              tu peux m' aider
              • [^] # Re: Python

                Posté par  . Évalué à 2.

                Tu veux faire quoi exactement? Remplacer $1 par $2 dans tous les fichiers de ton répertoire?
                • [^] # Re: Python

                  Posté par  . Évalué à 1.

                  de mon repertoire et sous repertoire.
                  • [^] # Re: Python

                    Posté par  . Évalué à 2.

                    Tu peux tout remplacer par:

                    find /Bureau/Linux/Test_Pano/archives/ -exec sed -i "s/"$1"/"$2"/g" {} \;


                    ça devrais le faire ;-)
                    • [^] # Re: Python

                      Posté par  . Évalué à 1.

                      donc find si j'ai bien compris te permet de lire les sous repertoires du repertoire courant qui est archives pour l'exemple.

                      je teste merci.

                      Mais mon fichier references je le mets ou ds la ligne de commande
                      • [^] # Re: Python

                        Posté par  . Évalué à 1.

                        Cela ne marche pas chez moi
                        • [^] # Re: Python

                          Posté par  . Évalué à 2.


                          man find



                          find /Bureau/Linux/Test_Pano/archives/ -name references -exec sed -i "s/"$1"/"$2"/g" {} \;
                          • [^] # Re: Python

                            Posté par  . Évalué à 2.

                            Si c'est dans references que tu spécifies $1 et $2 il faudrait que tu sois plus explicite. Comment les définis tu?


                            $1="blabla"
                            $1="toto"
                            ?
          • [^] # Re: Python

            Posté par  . Évalué à 4.

            attention à la casse (Test_Pano est différent de test_pano), sinon si ton script utilise awk, tu peux trouver un awk.exe sur internet, à toi d'adapter cela en script batch pour windows.

            Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it

            • [^] # Re: Python

              Posté par  . Évalué à 1.

              Mon script sh est

              #!/bin/bash
              find /Bureau/Linux/Test_Pano/ -exec sed -i "s/"$1"/"$2"/g" references {} \;

              references est lichier ou je mets $1 et $2

              Et voilà ce que me dit le shell
              supai@supai-desktop:~/Bureau/Linux/Test_Pano$ chmod +x testpano.sh
              supai@supai-desktop:~/Bureau/Linux/Test_Pano$ sh testpano.sh
              find: /Bureau/Linux: Aucun fichier ou dossier de ce type
              supai@supai-desktop:~/Bureau/Linux/Test_Pano$

              Je ne vois pas le pb
              • [^] # Re: Python

                Posté par  . Évalué à 3.

                /Bureau/Linux ne semble pas exister. Es tu sur du chemin que tu utilises?
                • [^] # Re: Python

                  Posté par  . Évalué à 5.

                  bien sûr c'est ~/Bureau/ (c'est à dire /home/supai/Bureau/ ) et non pas /Bureau/ qui serait dans la racine même.

                  Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it

                  • [^] # Re: Python

                    Posté par  . Évalué à 0.

                    Le script devient cela.

                    #!/bin/bash
                    find home/germain/Bureau/Linux/Test_appli_origine/Test_Pano/ -exec sed -i "s/"$1"/"$2"/g" {} \;

                    Mais cela ne marche toujours pas.
                    Et mon fichier références dans lequel je place mes recherches remplaces je l'appelle ou dans ma commande.
                • [^] # Re: Python

                  Posté par  . Évalué à 2.

                  à vue de nez, il manque un tilde
                  • [^] # Re: Python#!/bin/bash find home/germain/Bureau/Linux/Test_appli_origine/

                    Posté par  . Évalué à 0.

                    cela devient cela

                    #!/bin/bash
                    find ~/Bureau/Linux/Test_appli_origine/Test_Pano/ -exec sed -i "s/"$1"/"$2"/g" {} \;

                    mais le nom de mon fichier ds lequel j'appelle les paramètres $1 et $2 je l'insère ou.
                    • [^] # Re: Python#!/bin/bash find home/germain/Bureau/Linux/Test_appli_origine/

                      Posté par  . Évalué à 2.

                      Il faudrait peut être que tu expliques ton problème plus clairement si tu veux une réponse efficace ou bien te plonger toi même dans la documentation des commandes que tu utilises.

                      à quoi sert ton fichier? comment instancies tu tes variables? Pourquoi un fichier? il y en a beaucoup? etc...

                      Là je ne sais pas ce que tu essayes de faire donc...
                      • [^] # Re: Python#!/bin/bash find home/germain/Bureau/Linux/Test_appli_origine/

                        Posté par  . Évalué à 2.

                        Bon je reprends tout depuis le debut.

                        L'objectif est de remplacer des chaines de caractères dans tous les fichiers du répertoire courant et de ces sous répertoires.

                        Pour cela j'ai un fichier de référence dans lequel je viens chercher mes $1 et $2.
                        $1 est la chaine que je recherche
                        $2 est la chaine que je remplace

                        et mon script de base

                        #!/bin/bash
                        awk '{print "sed -i -e s/"$1"/"$2"/g *"}' references | sh

                        puis après il devient ceci

                        #!/bin/bash
                        find ~/Bureau/Linux/test/ -name references -exec sed -i "s/"$1"/"$2"/g" {} \;

                        mais cela ne marche pas pour le moment
                        • [^] # Re: Python#!/bin/bash find home/germain/Bureau/Linux/Test_appli_origine/

                          Posté par  . Évalué à 3.

                          #!/bin/bash
                          awk '{print "sed -i -e s/"$1"/"$2"/g *"}' references | sh

                          il y a un cumul de " qui t'embete surement

                          simplifions ces " qui nous embetent

                          #!/bin/bash
                          find ~/Bureau/Linux/test/ -name references -exec sed -i 's/$1/$2/g' {};
                          • [^] # Re: Python#!/bin/bash find home/germain/Bureau/Linux/Test_appli_origine/

                            Posté par  . Évalué à 1.

                            Quand je le lance il me dit qu'il manque un paramètre

                            find: Paramètre manquant pour « -exec » - cela veut dire quoi.
                            • [^] # Re: Python#!/bin/bash find home/germain/Bureau/Linux/Test_appli_origine/

                              Posté par  . Évalué à 2.

                              il te manque:
                              \;

                              Par contre, mon exemple est faussé. Je pensais que tu cherchais les fichiers appelés "references" et que tu souhaitais appliquer un traitement sur eux.

                              Pourquoi ne pas juste faire:

                              find ~/Bureau/Linux/test/ -exec sed -i 's/MaChaineQueJeVeuxRemplacer/LaChaineQuiRemplace/g' {} \;
                              et oublier ce fichier "references"?
                              • [^] # Re: Python#!/bin/bash find home/germain/Bureau/Linux/Test_appli_origine/

                                Posté par  . Évalué à 1.

                                parce que j'ai plusieurs chaines à traiter
                                • [^] # Re: Python#!/bin/bash find home/germain/Bureau/Linux/Test_appli_origine/

                                  Posté par  . Évalué à 1.

                                  #!/bin/bash
                                  awk '{find ~/Bureau/Linux/test/ -exec sed -i 's/$1/$2/g' {} \}' references | sh

                                  a ton avis cela marche
                                  • [^] # Re: Python#!/bin/bash find home/germain/Bureau/Linux/Test_appli_origine/

                                    Posté par  . Évalué à 1.

                                    pourquoi tu veux lancer un 'find' dans un awk ?

                                    je penses que tu n'as pas compris quel outil servi à quoi...

                                    find sert à chercher des fichiers/dossiers
                                    awk sert à appliquer des actions sur un fichier (http://www.shellunix.com/awk.html)

                                    si tu veux changer le mot TOTO en TITI dans le fichier references
                                    tu n'a pas besoin du find

                                    un simple sed -i -e 's/TOTO/TITI/g' references
                                    devrait suffir
                                    • [^] # Re: Python#!/bin/bash find home/germain/Bureau/Linux/Test_appli_origine/

                                      Posté par  . Évalué à 1.

                                      Ok cela marche bien.

                                      Je n'avais pas compris qu'un simple

                                      sed -i -e 's/TOTO/TITI/g' references

                                      comme le dit Neox, changeait aussi mes valeurs ds tous mes sous repertoires.

                                      Par compte puis-je faire référence à un fichier pour remplacer TOTO et TITI par une variable de type $1 et $2.
                                      • [^] # Re: Python#!/bin/bash find home/germain/Bureau/Linux/Test_appli_origine/

                                        Posté par  . Évalué à 2.

                                        toi vraiment pas comprendre...

                                        sed -i -e 's/TOTO/TITI/g' references

                                        chercher le mot TOTO
                                        le remplace par TITI
                                        dans le fichier references

                                        donc si tu ecris
                                        sed -i -e 's/$1/$2/g' references

                                        ca changera $1 (le contenu de la premiere variable de ton script)
                                        en $2 (le contenu de la 2e variable de ton script)
                                        toujours dans le fichier references

                                        ton script etant appelé dans notre exemple par
                                        ton_script.sh TOTO TITI

                                        on est mercredi apres midi, cela ressemble quand meme sacrement à un exercice
                                        alors va lire ton cours ;)

                                        si c'est pas le cas, ben peut-etre aller lire les pages de manuel des commandes
                                        find, sed et bash
                                  • [^] # ...

                                    Posté par  . Évalué à 2.

                                    tu veux plutôt ca :
                                    awk '{print "find ~/Bureau/Linux/test/ -exec sed -i \'s/"$1"/"$2"/g\' {} \}' references

                                    mais ca reste pas très beau

                                    pourquoi pas quelque chose comme

                                    while read x y
                                    do
                                    find ~/test -exec sed -i "s/$x/$y/g" {} \;
                                    done < references
                                    • [^] # Re: ...

                                      Posté par  . Évalué à 1.

                                      Je viens de tester
                                      Le shell me dit qu'il manque un argument
                                    • [^] # Re: ...

                                      Posté par  . Évalué à 2.

                                      je confirme ce que propose ffx

                                      et en jouant avec les variables, tu obtiens un script qui dit :

                                      while read x y
                                      do
                                      find $1 -type f -exec sed -i "s/$x/$y/g" {} \;
                                      done < $2


                                      et qui fonctionne avec l'appel :
                                      ton_script.sh le_dossier_de_depart le_fichier_contenant_les_changements_a_faire
                                      • [^] # Re: ...

                                        Posté par  . Évalué à 1.

                                        Je ne comprends pas bien.
                                        x et y correcpondent aux chaines que je remplace.
                                        $1 et $2 correspondent à quoi alors.

                                        et quand je suis dans le shell je tape
                                        monscript.sh dossierdepart fichierreference

                                        donc $1 correspond au dossier de départ et $2 au fichier de référence.

                                        Est ce cela?
                                      • [^] # Re: ...

                                        Posté par  . Évalué à 1.

                                        mon fichier 4.sh est de cette forme

                                        #!/bin/bash
                                        while read x y
                                        do
                                        find $1 -type f -exec sed -i "s/$x/$y/g" {} \;
                                        done < $2

                                        et qd je tape ds mon shelle la syntaxe cela ne marche pas.

                                        supai@supai-desktop:~/Bureau/Linux/test$ chmod +x 4.sh
                                        supai@supai-desktop:~/Bureau/Linux/test$ 4.sh test references
                                        bash: 4.sh : commande introuvable
                                      • [^] # resolu

                                        Posté par  . Évalué à 1.

                                        Impec cela marche.

                                        Merci à vous pour toute ces infos qui me sont précieuses.
  • # Powershell!

    Posté par  . Évalué à 1.

    Comme le Bash, MS Powershell est compatible zsh. Il est gratuit, y'a qu'à l'installer et tu pourras probablement exécuter ton script shell sous Windows ;)

    Mais ça restera un script shell... pas un .exe
    • [^] # Re: Powershell!

      Posté par  . Évalué à 1.

      Merci pour l'info je connais déja ce produit qui je trouve est très bien.

Suivre le flux des commentaires

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