Bonjour,
Je bloque lors de l'écriture de mon script avec la fonction find. Je voudrai savoir si mon utilisation est possible ou non.
Lors d'une recherche find je souhaite utiliser plusieurs commandes sur les résultats grace à -exec.
find . -name fichier -exec 'commande1 {} ; commande 2 {}' \;
ou
find . -name fichier -exec commande1 {} ; commande 2 {} \;
exemple :
touch fichier; find . -name fichier -exec 'echo "{} trouvé"; echo rien' \;
touch fichier; find . -name fichier -exec $(echo "{} trouvé"; echo rien) \;
touch fichier; find . -name fichier -exec `echo "{} trouvé"; echo rien` \;
comme cela ne marche pas, j'ai voulu définir un fonction "fn" en amont dans le script puis l'appeler dans find -exec fn {} \;
mais ca ne marche pas non plus !!!
voici un script :
#!/bin/bash
fn(){
echo '$1 = '"$1"
echo 'la fonction "fn" marche bien'
echo
}
fn coucou
touch fichier0
find . -name fichier0 -exec echo "{} trouvé" \;
find . -name fichier0 -exec fn {} \;
find . -name fichier0 -exec `fn {}` \;
find . -name fichier0 -exec $(fn {}) \;
echo ' la fonction "fn" ne marche pas dans la fonction "find -exec"'
rm -v fichier0
echo fin
(pour tester facilement copier si dessous dans un terminal
mkdir rep_de_test; cd rep_de_test; touch script1; chmod +x script1 ; cat <<'EOF' > script1
#!/bin/bash
fn(){
echo '$1 = '"$1"
echo 'la fonction "fn" marche bien'
echo
}
fn coucou
touch fichier0
find . -name fichier0 -exec echo "{} trouvé" \;
find . -name fichier0 -exec fn {} \;
find . -name fichier0 -exec `fn {}` \;
find . -name fichier0 -exec $(fn {}) \;
echo ' la fonction "fn" ne marche pas dans la fonction find -exec'
rm -v fichier0
echo fin
EOF
puis
./script1
🙂 )
Est-ce que c'est possible dans in script de définir une fonction puis de l'utiliser dans la commande find -exec?
La seule solution que j'ai trouvée c'est de créer 2 scripts dont 1 qui contient la fonction
fichier 1 = "fn" :
#!/bin/bash
echo '$1 = '"$1"
echo 'la fonction "fn" marche bien'
echo
fichier 2 = "script2" :
#!/bin/bash
./fn coucou
touch fichier0
find . -name fichier0 -exec echo "{} trouvé" \;
find . -name fichier0 -exec ./fn {} \;
find . -name fichier0 -exec `./fn {}` \;
find . -name fichier0 -exec $(./fn {}) \;
rm -v fichier0
echo fin
pour tester :
touch fn; chmod +x fn ; cat <<'EOF' > fn
#!/bin/bash
echo '$1 = '"$1"
echo 'la fonction "fn" marche bien'
echo
EOF
ET
touch script2; chmod +x script2 ; cat <<'EOF' > script2
#!/bin/bash
./fn coucou
touch fichier0
find . -name fichier0 -exec echo "{} trouvé" \;
find . -name fichier0 -exec ./fn {} \;
rm -v fichier0
echo fin
EOF
puis
./script2
Merci pour votre aide
(( pensez à supprimer "rep_de_test" si vous avez testé mes scripts 😉 ))