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.
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.
# 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é...)
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
#!/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$
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...
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"?
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
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 ;)
# chmod +x
Posté par ✅ ffx . Évalué à 6.
[^] # Re: chmod +x
Posté par supai . Évalué à 1.
je pensai à créer un petit executable sous c# par exemple,mais je n'y connais rien.
# Python
Posté par dood . Évalué à 3.
En plus, le python, c'est bon ;)
Guilhelm
[^] # Re: Python
Posté par supai . Évalué à 1.
[^] # Re: Python
Posté par NeoX . Évalué à 3.
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 supai . Évalué à 2.
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 pampryl . É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 supai . Évalué à 1.
tu peux m' aider
[^] # Re: Python
Posté par pampryl . Évalué à 2.
[^] # Re: Python
Posté par supai . Évalué à 1.
[^] # Re: Python
Posté par pampryl . Évalué à 2.
find /Bureau/Linux/Test_Pano/archives/ -exec sed -i "s/"$1"/"$2"/g" {} \;
ça devrais le faire ;-)
[^] # Re: Python
Posté par supai . Évalué à 1.
je teste merci.
Mais mon fichier references je le mets ou ds la ligne de commande
[^] # Re: Python
Posté par supai . Évalué à 1.
[^] # Re: Python
Posté par pampryl . Évalué à 2.
man find
find /Bureau/Linux/Test_Pano/archives/ -name references -exec sed -i "s/"$1"/"$2"/g" {} \;
[^] # Re: Python
Posté par pampryl . Évalué à 2.
?$1="blabla"
$1="toto"
[^] # Re: Python
Posté par B16F4RV4RD1N . Évalué à 4.
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 supai . Évalué à 1.
#!/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 pampryl . Évalué à 3.
[^] # Re: Python
Posté par B16F4RV4RD1N . Évalué à 5.
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 supai . Évalué à 0.
#!/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 ✅ ffx . Évalué à 2.
[^] # Re: Python#!/bin/bash find home/germain/Bureau/Linux/Test_appli_origine/
Posté par supai . Évalué à 0.
#!/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 pampryl . Évalué à 2.
à 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 supai . Évalué à 2.
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 NeoX . É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 supai . Évalué à 1.
find: Paramètre manquant pour « -exec » - cela veut dire quoi.
[^] # Re: Python#!/bin/bash find home/germain/Bureau/Linux/Test_appli_origine/
Posté par pampryl . Évalué à 2.
\;
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:
et oublier ce fichier "references"?find ~/Bureau/Linux/test/ -exec sed -i 's/MaChaineQueJeVeuxRemplacer/LaChaineQuiRemplace/g' {} \;
[^] # Re: Python#!/bin/bash find home/germain/Bureau/Linux/Test_appli_origine/
Posté par supai . Évalué à 1.
[^] # Re: Python#!/bin/bash find home/germain/Bureau/Linux/Test_appli_origine/
Posté par supai . Évalué à 1.
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 NeoX . Évalué à 1.
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 supai . Évalué à 1.
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 NeoX . Évalué à 2.
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
[^] # Re: Python#!/bin/bash find home/germain/Bureau/Linux/Test_appli_origine/
Posté par supai . Évalué à 1.
Je vais me debrouiller.
Encore merci
[^] # ...
Posté par ✅ ffx . Évalué à 2.
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 supai . Évalué à 1.
Le shell me dit qu'il manque un argument
[^] # Re: ...
Posté par NeoX . Évalué à 2.
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 supai . Évalué à 1.
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 supai . Évalué à 1.
#!/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 supai . Évalué à 1.
Merci à vous pour toute ces infos qui me sont précieuses.
# Powershell!
Posté par Leccux . Évalué à 1.
Mais ça restera un script shell... pas un .exe
[^] # Re: Powershell!
Posté par supai . Évalué à 1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.