#1 Le 20/11/2014, à 18:22
- cristobal78
(résolu) recherche fichier dans /home avec message de fin
Bonjour à tous
je connais bien sur la commande find pour rechercher un fichier mais comme j'ai la flemme de la retaper à chaque fois j'ai mis ça dans un script et j'ai rajouté des "enjolivures" via zenity.
Voici le script :
#!/bin/bash
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# nom du script = search-fic
# Fonction du script = recherche un fichier dont on ne connait qu'une partie du nom
# Syntaxe = search-fic
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
zenity --info --width=500 --text="Ce programme recherche un fichier dont on ne connait qu'une partie du nom"
# saisie de la partie connue du nom
nom_partiel=$(zenity --entry --title="Recherche" --text="Saisissez la partie connue du nom du fichier à retrouver (indépendamment de la casse) :")
#recherche
find "$HOME" -iname "*$nom_partiel*" | zenity --width=800 --height=800 --list --title="" --text=" " --column="Correspondances trouvées"
# conclusion
zenity --info --text="OPÉRATION TERMINÉE\n\nFin du programme "
ça marche très bien mais l'autre jour j'ai eu un doute.
J'avais lancé le script et il s'est mis à tourner, puis à écrire un premier fichier, puis attendre quelques secondes, puis plus tard un autre fichier et enfin le bon : celui que je cherchais. J'ai cliqué sur valider et c’était fini.
Jusque là tout va bien mais j'ai surtout compris que mon script ne m'indique pas de façon évidente et claire qu'il a bel et bien fini de chercher et qu'il n'y a plus rien à attendre.
Autrement dit si je n'avais pas retrouvé mon fichier à la 3-eme ligne j'aurai peut être attendu encore 10 secondes ou une minute sans savoir si le script cherche toujours ou bien s'il me dit qu'il n'a rien trouvé de plus correspondant au critère de recherche et que c'est bien fini.
Pour lever tout doute je voudrais savoir comment modifier mon script pour que je sache qu'il a bien fini de chercher, que tout est là et qu'il n'y a pas de raison d'attendre plus longtemps.
J'ai bien pensé à récupérer le code de sortie de la commande find (un zéro qd elle s'achève correctement) mais je ne vois pas comment et où le mettre dans le script.
Si qq'un a une idée je suis preneur
a+
Dernière modification par cristobal78 (Le 23/11/2014, à 14:08)
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#2 Le 20/11/2014, à 18:44
- pingouinux
Re : (résolu) recherche fichier dans /home avec message de fin
Bonjour,
Par exemple
find ..... || echo "Je n'ai rien trouvé"
Ajouté :
Et avec zenity, ceci devrait faire l'affaire
(find ..... || echo "Je n'ai rien trouvé") | zenity .....
Dernière modification par pingouinux (Le 20/11/2014, à 18:51)
Hors ligne
#3 Le 20/11/2014, à 20:19
- cristobal78
Re : (résolu) recherche fichier dans /home avec message de fin
salut pingouinux
j'ai modifié selon ta 2-eme proposition (avec zenity) :
find "$HOME" -iname "*$nom_partiel*" ||echo "pas de fichier correspondant à votre recherche" | zenity --width=800 --height=800 --list --title="" --text=" " --column="Correspondances trouvées"
mais cela ne marche malheureusement pas.
Que le fichier existe ou non, j'obtiens la fenêtre "Correspondances trouvées" avec dedans une seule ligne disant "pas de fichier correspondant ...".
Après validation de cette fenêtre j'arrive à la fenêtre de fin, je valide et c'est fini.
Je pense que la donnée qui est passée à la fenêtre zenity ("correspondances trouvées") ne peut être que le résultat de l'echo qui la précède. Comment le résultat du find, qui est en premier, pourrait, si je puis dire, passer par dessus ?
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#4 Le 20/11/2014, à 20:23
- pingouinux
Re : (résolu) recherche fichier dans /home avec message de fin
Tu as oublié les parenthèses par rapport à ma commande.
Hors ligne
#5 Le 20/11/2014, à 20:55
- Compte anonymisé
Re : (résolu) recherche fichier dans /home avec message de fin
J'ai fait une petite recherche et je me demande pourquoi avoir utilisez zenity pour un shell (zenity qui doit être téléchargé au préalable) alors qu'il existe la commande read qui lui n'a pas besoin d'installer une application spécifique ?
#6 Le 21/11/2014, à 00:06
- cristobal78
Re : (résolu) recherche fichier dans /home avec message de fin
Bravo pingouinux c'était bien sur les parenthèses qui manquaient.
Ca marche bien.
Donc si la cde permet de trouver des correspondances celles ci sont affichées dans la fenetre zenity et la dernière ligne affiche "pas de correspondance..."
Donc on sait que c'est fini. Du coup je vais changer cet echo en "Plus de correspondance ..." ce sera plus clair.
Néanmoins je ne suis pas sur d'avoir tout bien compris.
1. La cde find cherche et trouve les correspondances
2.si elle a échoué les || font que le echo "pas de correspondance..." s'exécute et cette chaine de car. est passée à zenity qui l'affiche.
Mais si la cde inf réussie normalement le echo ne devrait pas s'exécuter alors pourquoi est que je le retrouve dans la fenetre zenity en dernière ligne à la suite de toutes les correspondances trouvées ?
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#7 Le 21/11/2014, à 08:26
- pingouinux
Re : (résolu) recherche fichier dans /home avec message de fin
En fait, je me suis trompé…
La commande find ne retourne pas de code d'erreur si on ne trouve aucun fichier répondant au critère, mais uniquement en cas d'erreur dans l'exécution de la commande, par exemple si on lance la recherche dans un répertoire qui n'existe pas (c'est ainsi que j'avais fait mes tests hier).
Puisque tu vois apparaître systématiquement "pas de correspondance...", je pense que ta commande find ne s'exécute pas correctement. Y a-t-il un message d'erreur dans le terminal d'où tu l'as lancée ?
Pour ton problème initial, tu peux rediriger la sortie de find sur un fichier temporaire, lancer zenity si ce fichier n'est pas vide, ou sinon écrire un message de fin.
Hors ligne
#8 Le 21/11/2014, à 10:30
- Hizoka
Re : (résolu) recherche fichier dans /home avec message de fin
Quelle fierté ! J'ai trouvé une soluce avant pingouinux!
J'aurais vécu assez longtemps pour le voir se tromper
(while read file
do
echo "${file}"
temp="${file}"
done < <(find "/home/hizoka" -iname "*.pdf")
if [[ -n "${file}" ]]
then
echo "C'est termine"
else
echo "Pas de résultat"
fi ) | zenity --width=800 --height=800 --list --title="" --text=" " --column="Correspondances trouvées"
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#9 Le 21/11/2014, à 13:49
- pingouinux
Re : (résolu) recherche fichier dans /home avec message de fin
@Hizoka :
Bravo, mais tu aurais dû tester ton script
C'est temp qu'il faut tester, et non pas file, qui n'est plus défini quand on sort de la boucle.
Ajouté : Tu peux aussi simplifier le script
msg="Pas de résultat"
(while read file
do
echo "${file}"
msg="C'est termine"
done < <(find "$HOME" -iname "*.pdf")
echo "$msg"
) | zenity --width=800 --height=800 --list --title="" --text=" " --column="Correspondances trouvées"
Dernière modification par pingouinux (Le 21/11/2014, à 14:14)
Hors ligne
#10 Le 21/11/2014, à 14:48
- Hizoka
Re : (résolu) recherche fichier dans /home avec message de fin
merde, j'ai pas copié le bon code
car oui en effet j'avais testé.
en effet, c'est un chouille simplifié, sale plagier
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#11 Le 21/11/2014, à 16:45
- cristobal78
Re : (résolu) recherche fichier dans /home avec message de fin
1-
pour répondre à Pingouinux post #7
voici les messages d'erreur
si pas de fichier trouvé :
(zenity:3102): GLib-WARNING **: /build/buildd/glib2.0-2.32.4/./glib/giounix.c:411Error while getting flags for FD: Mauvais descripteur de fichier (9)
si fichier trouvé:
(zenity:3136): GLib-WARNING **: /build/buildd/glib2.0-2.32.4/./glib/giounix.c:411Error while getting flags for FD: Mauvais descripteur de fichier (9)
Je suis ravi de voir que mon tout petit pb à résoudre par un tout petit script puisse intéresser des pointures comme Pingouinux et Hizoka
Donc mon script sera peut être utile à quelqu'un d'autre
2-
Dans le code d'Hizoka on crée une variable temp="${file}" mais on ne s'en sert pas dans la suite. Why ???
Autre question : je ne sais pas ce que signifie les { et } autour de file.
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#12 Le 21/11/2014, à 17:03
- Hizoka
Re : (résolu) recherche fichier dans /home avec message de fin
Comme l'a signalé pingouinux, c'est une erreur lors de ma copie du code, on teste $test et non $file comme indiqué.
les {} sont là pour délimiter les variables, et en bash les {} permettent pas mal de truc.
var="Bon"
echo "${var}jour"
var="Bonjour"
echo "${var:3}"
echo "${var//o/a}"
echo "${var%%j*}"
var=(B o n j o u r)
echo "${var[@]//o/a}"
Mais sinon, pour info, je ne suis pas une pointure
PS : Putains de lag sur le forum...!!!
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#13 Le 21/11/2014, à 21:14
- cristobal78
Re : (résolu) recherche fichier dans /home avec message de fin
@ hizoka
j'ai lu ton exemple avec "bonjour" mais en quoi est ce différent de :
var=bon
echo $var"jour"
bonjour
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#14 Le 21/11/2014, à 21:24
- Hizoka
Re : (résolu) recherche fichier dans /home avec message de fin
var=bon
echo $var"jour"
encadre de "", ça évitera des erreurs quand tu mettras une valeur à espace.
Ton echo fait crados...
il faut mieux encore une fois tout encadrer de " pour eviter les problemes.
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#15 Le 22/11/2014, à 02:36
- cristobal78
Re : (résolu) recherche fichier dans /home avec message de fin
Je me suis basé sur le code de pingouinux pour modifier mon script d'origine et bien sur ça marche super
Donc merci à tous les 2 et je passe en résolu même si je n'arrive pas bien à comprendre comment fonctionne la boucle while de pingouinux
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#16 Le 22/11/2014, à 07:58
- pingouinux
Re : (résolu) recherche fichier dans /home avec message de fin
je n'arrive pas bien à comprendre comment fonctionne la boucle while de pingouinux
La boucle while en #9 est celle de Hizoka en #8.
msg="Pas de résultat" # Le message à afficher en fin de recherche, si on ne trouve rien
(while read file # Le résultat du find est lu ligne par ligne
do
echo "${file}" # Le nom du fichier est envoyé sur stdout de la boucle (pour utilisation par zenity)
msg="C'est termine" # Le message final est modifié, car on vient de trouver quelque chose
done < <(find "$HOME" -iname "*.pdf") # Le résultat du find (stdout) sert d'entrée (stdin) à la boucle
echo "$msg" # Le message final, quel qu'il soit, est envoyé sur stdout
) | zenity .....
Le plus simple serait de conserver le même message de fin dans tous les cas
( find .....; echo "C'est termine" ) | zenity .....
Dernière modification par pingouinux (Le 22/11/2014, à 08:00)
Hors ligne
#17 Le 22/11/2014, à 11:17
- Hizoka
Re : (résolu) recherche fichier dans /home avec message de fin
Je me permets de dire la même chose mais e un peu différent, ça peut aider à comprendre parfois...
# Message par defaut
msg="Pas de résultat"
# Boucle traitant les retours de find fichier par fichier
(while read file
do
# Envoie le nom du fichier à zenity (zenity recherche ce qui se passe sur stdout)
echo "${file}"
# Maintenant qu'on a trouvé au moins un fichier, le texte est mis à jour.
msg="C'est termine"
# Envoie les retours de find dans la boucle
done < <(find "${HOME}" -iname "*.pdf")
# Envoie du mesage à Zenity, qui sera soit celui par defaut s'il n'a pas trouvé de fichier, soit celui indiquant qu'un fichier a été trouvé
echo "${msg}"
) | zenity .....
Pour comprendre le code :
# Recherche les fichiers pdf et les renvoies, on ne peut pas faire grand chose comme ca
find "${HOME}" -iname "*.pdf"
# /home/hizoka/fichier.pdf
# /home/hizoka/fichier2.pdf
# ...
# Du coup on va utiliser une boucle afin de pouvoir traiter les retours un à un. Chaque ligne ou fichier est nommé "file" dans le cas présent.
while read file
do
echo "find a trouvé le fichier : ${file}"
done < <(find "$HOME" -iname "*.pdf")
# find a trouvé le fichier : /home/hizoka/fichier.pdf
# find a trouvé le fichier : /home/hizoka/fichier2.pdf
# ...
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne