Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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  smile  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é… sad

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! tongue
J'aurais vécu assez longtemps pour le voir se tromper smile

(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 tongue
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 wink
car oui en effet j'avais testé.

en effet, c'est un chouille simplifié, sale plagier  lol


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 smile
Donc mon script sera peut être utile à quelqu'un d'autre  tongue

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 wink

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 sad


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

cristobal78 a écrit :

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