#1 Le 28/05/2026, à 12:14
- BrunoL
[Résolu] Insérer programme dans une commande bash
Bonjour,
Je souhaiterai écrire un programme qui reçoit les résultats d'une commande bash type "find".
Le programme serait en Rust.
Mon problème c'est que je trouves un tas de truc genre Ratatui, clap, Bpaf et autres mais je n'y comprends pas grand chose faute d'exemple.
Donc je me tourne vers vous pour avoir des réponses à quelques questions générales :
- Lorsque je récupérerai le résultat d'un find s'agira-t-il d'un fichier tampon ou est-ce un flux de data pour chaque élément trouvé ?
- Si je dois émettre un message en retour aurai-je les coordonnées pour répondre au terminal émetteur ?
- Est-il possible de récupérer la commande qui a généré le fichier/flux (find . -type f -name "*.toto ..." ?
- Le plus simple ne serait-il pas d'envoyer la commande en paramètre et la faire exécuter par le programme ?
Bon, c'est surement trivial mais j'apprécierai que vous m'éclairiez ? La question concerne le bash et pas Rust ... ça c'est pour plus tard
.
Merci et bonne journée.
Edit : Si vous disposez d'exemples ou de liens je suis preneur.
Dernière modification par BrunoL (Le 01/06/2026, à 18:43)
Hors ligne
#2 Le 28/05/2026, à 14:56
- Watael

Re : [Résolu] Insérer programme dans une commande bash
salut,
1/ 2
2/ quoi ?
3/ non.
4/ Rust comporte probablement un appel system().
je tiens pour acquis que ce n'est pas un bonne pratique (j'ai oublié depuis longtemps pourquoi)
tu ne veux pas écrire une routine qui parcourt l'arborescence souhaitée ? mais ça, c'est une question Rust.
NB: find est exécutée dans le shell, mais ce n'est pas une commande bash.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 28/05/2026, à 17:35
- BrunoL
Re : [Résolu] Insérer programme dans une commande bash
Hello Watael,
1/ je m'en doutais;
2/ si le résultat du "find ..." (par exemple) est foireux pour mon traitement je fais un retour ... au terminal et dans le log;
3/ dommage;
4/ certes, mais j'aimerais bien que bash se dépatouille de tous les accès et choix de fichiers, me permettant de ne récupérer que des listes correspondant à mes attentes. J'ai pas envie de développer une interface pour des trucs que bash fait à merveille.
Merci pour ton retour et je note que find n'est pas une commande bash ![]()
Hors ligne
#4 Le 28/05/2026, à 17:56
- Watael

Re : [Résolu] Insérer programme dans une commande bash
foireux... ?
soit, il y a une erreur dans la formulation du find, alors le message d'erreur sera affiché sur la sortie d'erreur ![]()
tu peux l'utiliser dans le shell, ou le laisser traiter par le programme en lisant stderr
soit, find ne trouve rien, et c'est au programme de traitement de dire qu'il n'a rien à faire ![]()
j'ai l'impression que tu nous demandes de t'expliquer comment jouer avec des briques encastrables, alors que tu n'as pas encore ouvert la boîte, voire que tu ne sais même pas où est le magasin de jouets.
![]()
Dernière modification par Watael (Le 28/05/2026, à 17:58)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 28/05/2026, à 18:05
- BrunoL
Re : [Résolu] Insérer programme dans une commande bash
... soit find fonctionne, trouve quelque chose mais ne le restitue pas sous la forme attendue par le programme.
La boite de brique est ouverte mais l'allusion à find n'était qu'un exemple pour essayer d'illustrer le propos. Et je dois dire, compte tenu de la qualité de ton retour, que ce n'était pas totalement mauvais. ![]()
Ceci dit je réfléchis à l'architecture d'une solution donc la boite de brique est juste entrouverte
Faire des choix sans totalement maîtriser les outils n'est pas toujours simple. ![]()
édit : après réflexion, un truc m’apparaît pouvoir prêter à quiproquos l'objectif visé n'est pas le développement de script dans des jobs réguliers mais de permettre à des utilisateurs (avertis) de lancer les scripts sur des sélections un peu tordues de fichiers avec ajout d'information selon bon plaisir ...
Dernière modification par BrunoL (Le 28/05/2026, à 18:09)
Hors ligne
#6 Le 28/05/2026, à 20:31
- diesel

Re : [Résolu] Insérer programme dans une commande bash
édit : après réflexion, un truc m’apparaît pouvoir prêter à quiproquos l'objectif visé n'est pas le développement de script dans des jobs réguliers mais de permettre à des utilisateurs (avertis) de lancer les scripts sur des sélections un peu tordues de fichiers avec ajout d'information selon bon plaisir ...
Ce que tu nous décris (vaguement), là, c'est une véritable application, pas juste un script de trois lignes.
Avant de commencer à rechercher des outils, il te faut formaliser ton besoin en détail.
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#7 Le 01/06/2026, à 09:09
- BrunoL
Re : [Résolu] Insérer programme dans une commande bash
Hello désolé pour le délai.
Je ne parle pas d'une appli mais de quelque chose de bien plus ciblé. J'adore les actions personnalisées de Thunar à qui je confie des traitements spécifiques :
(ex.: pour concrétiser la réflexion, je parcours un répertoire de photos, j'en vois une peu trop claire ; clic droit sur la photo avec action éclaicir. Même raisonnement, pour un répertoire, toutes les photos de la journée x sont trop claire, clic droit ...)
J'ai déjà réalisé cette fonctionnalité (en python) qui fonctionne parfaitement. MAIS, j'ai quelques "utilisateurs" exigeant qui émettent :
- dis donc c'est un peu lent non !?
- super ton truc mais ce serait encore mieux si je pouvais lancer une sélection sur fichiers ou répertoires multiples résultat d'une recherche bash "tordue".
J'ai l'occasion de pouvoir passer de Python à Rust, ce qui devrait me régler les pbs de lenteur et je souhaiterai répondre au 2ième point d'utilisateur un peu plus pointus en leur permettant de faire leurs sélection de fichier et de les envoyer au prog. D'où ma recherche d'alimention du prog fichier par fichier ou répertoire par répertoire.
Ce ne serait plus via Thunar mais dans un émulateur de terminal et je ne veux pas trop toucher aux spécifs du programme d'origine ni développer une IHM.
J'ai la solution de créer un fichier tampon qui récupère la sélection suivie d'une boucle qui envoie un par un les "lignes" au prog. Mais je me demande s'il n'y a pas plus "naturel".
Rappel : nous sommes sur le forum "ligne de commande ![]()
Édit : et le retour c'est pour les prévenir que le job est terminé ... là j'ai pas trop d'idée sinon leur envoyer un mail. C'est lourd mais tout est en place.
J'espèr avoir clarifié le sujet. Sinon pas de problème c'est résolu "à l'ancienne" ![]()
Dernière modification par BrunoL (Le 01/06/2026, à 09:16)
Hors ligne
#8 Le 01/06/2026, à 10:49
- iznobe

Re : [Résolu] Insérer programme dans une commande bash
Bonjour , qu ' est ce qui empêche de créer un tableau ( donc une variable ) qui stocke les nom de fichiers que tu désires faire traiter par le programme .
Comme on ne sait pas ce qu ' est ce " programme " , difficile de répondre , mais , j ' ai cru comprendre que c ' était en fait un script soit en python soit en rust .
Du coup , il " suffit " de passer le tableau ( créé en bash ) via une commande , puis de le passer en paramètre au script python / rust et de le traiter .
Peu importe le langage utilisé , tous sont capables de lire / créer des tableaux ( ou liste ).
find ....
création d ' un tableau # ça doit être possible de faire ça directement dans le find , même si je ne maitrise pas vraiment .
appel du script avec passage de la variable.Autre possibilité :
directement créer un script bash qui fabrique le tableau a partir du retour de la commande find , et appel du script python / rust dans le script bash.
Peut être plus complexe a mettre en œuvre.
Dernière modification par iznobe (Le 01/06/2026, à 10:57)
Hors ligne
#9 Le 01/06/2026, à 11:33
- Watael

Re : [Résolu] Insérer programme dans une commande bash
création d ' un tableau [...] directement dans le find
find ne fait pas ça. Il peut écrire le résultat de la recherche dans un fichier selon le format indiqué (-fprintf file format).
ou bien bash, lui, peut "lire" le résultat dans un tableau avec mapfile.
J'ai la solution de créer un fichier tampon qui récupère la sélection suivie d'une boucle qui envoie un par un les "lignes" au prog. Mais je me demande s'il n'y a pas plus "naturel".
tu peux faire exécuter ton programme sur chaque fichier trouvé avec -exec ou -execdir.
c'est quoi "tordue" ?
tu peux nous rappeler ce que fait ton programme, stp ?
Dernière modification par Watael (Le 01/06/2026, à 16:35)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#10 Le 01/06/2026, à 15:40
- BrunoL
Re : [Résolu] Insérer programme dans une commande bash
@iznobe effectivement ce que tu appelles tableau je l'appelle fichier tampon mais mon idée serait de m'en passer. A l'image des enchaînement de commande en bash. Je me demandais s'il ne serait pas possible de mettre mon prog dans le "flux" de données.
Je crois que c'est ce que dit Watael dans
tu peux faire exécuter ton programme sur chaque fichier trouvé avec -exec ou execdir.
@Watael, veux-tu dire qu'il est possble d'envisager un truc du genre
$maCommande -exec monPrograme {} \; ... ?Si tel est le cas, j'approfondirai car c'est un truc comme cela que je cherche mais j'ai pas envie d'investir sur un truc impossible et je ne suis pas un crac en bash, le -exec {} \; m'a toujours semblé obscur ![]()
Le traitement travaille sur des photos mais sur des caractéristiques un peu plus sophistiquées que les histogrammes et il peut combiner des lots de photos (répertoires ... très lourds en temps d'exécution).
"tordue" c'est tout ce qu'ils veulent pouvoir faire sans être contraint par mes choix
les lots d'images peuvent être variés et donc issus de requêtes touchant divers répertoires, fichiers sur des critères qui n'appartiennent qu'à eux ![]()
Dernière modification par BrunoL (Le 01/06/2026, à 18:42)
Hors ligne
#11 Le 01/06/2026, à 16:17
- iznobe

Re : [Résolu] Insérer programme dans une commande bash
tu peux faire le " -exec tonScript parametre(s) a passer au script " directement dans le find .
c ' est ce que j' essayais d' expliquer ( certainement pas très clair ) dans mon message précédent , et que je ne maitrise pas le sujet .
Il est possible de se passer du ou des paramètres , si la sortie de find est adaptée au script .
Mais , toujours la même remarque : on ne sait pas ce qu ' a besoin de " recevoir " le script en rust ou en python , donc difficile de proposer quelquechose de vraiment pertinent ...
Si un chemin absolu de fichier fait l' affaire , alors ç ' est largement faisable.
par contre , ce n ' est pas ce qui sera le plus performant , forcément.
Dernière modification par iznobe (Le 01/06/2026, à 16:21)
Hors ligne
#12 Le 01/06/2026, à 17:00
- BrunoL
Re : [Résolu] Insérer programme dans une commande bash
@iznobe désolé pour l'imprécision, les arguments qui passerons seront des chemin de fichier ou de répertoire. C'est ce qui se fait sur le script python actuel via les actions personnalisée de Thunar. Si le -exec s'avère pertinent je décortiquerai ses limites en matière de passage d'arguments mais pour le moment c'est le minimum.
C'est quoi l'aspect performance que tu évoques ? J'envisageais cette solution car je la pense optimale ... !?
Dernière modification par BrunoL (Le 01/06/2026, à 17:02)
Hors ligne
#13 Le 01/06/2026, à 17:01
- Watael

Re : [Résolu] Insérer programme dans une commande bash
ce que je comprends, c'est que c'est l'utilisateur qui passe une liste (d'un ou plusieurs fichiers) au programme.
il faut envisager, alors, deux cas :
les fichiers sont passés en arguments; le programme doit donc itérer (au moins pour vérifier qu'il s'agit de fichiers valides) sur la liste des paramètres.
tonProg /cheminAbsolu/fic1 '../fic 2' 'chemin Relatif/fic_n+1'les fichiers sont transmis via stdin par un pipe depuis n'importe quel programme (find par exemple), et là... gare à la "cata" parce qu'un nom de fichier peut contenir des alinéas.
dans le cas de find, il est recommandé, quand on pipe la sortie vers un autre programme, d'utiliser un caractère NULL comme séparateur :find ./ -type f -printf '%p\0' | while IFS='' read -d ''; do echo "$REPLY"; doneMÊME si c'est rare, et qu'on est à 99,999% sûr qu'il n'y en a pas !

je ne vois pas de bonne solution sans contraindre l'utilisateur à respecter un format de données.
c'est-à-dire, à l'instar de cut et sort, faire passer les noms de fichiers en arguments uniquement.
le problème des espaces et des alinéas demeure cependant, mais, ça, je dirais que c'est le problème de l'utilisateur de passer des arguments valides au programme.
tu vas pas aller em bêter le développeur de imageMagick parce que tu veux passer une liste d'arguments invalides au programme; c'est à l'utilisateur de s'adapter. <-point
Dernière modification par Watael (Le 01/06/2026, à 17:02)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#14 Le 01/06/2026, à 17:09
- BrunoL
Re : [Résolu] Insérer programme dans une commande bash
@Watael Parfait ! J'opte pour la 2nde solution. Mais pourrais-tu la reformuler avec monProg.rs en bout de chaîne ... là je serai comblé ![]()
Je te rassure, je n'importunerai pas le dév de imageMagick. J'ai des "utilisateurs" un peu réfractaire au "." et le pb ce sont eux qui me paye
s'il m'envoie du garbage alors panic programme ![]()
Dernière modification par BrunoL (Le 01/06/2026, à 17:11)
Hors ligne
#15 Le 01/06/2026, à 17:48
- Watael

Re : [Résolu] Insérer programme dans une commande bash
le code montré pour la seconde solution est l'illustration d'une sortie/lecture avec le caractère NULL.
si tu crois que ça convient, utilise plutôt -exec :
find <chemin> <options: type nom...> -exec tonProgramme {} +Dernière modification par Watael (Le 01/06/2026, à 17:49)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#16 Le 01/06/2026, à 17:55
- Watael

Re : [Résolu] Insérer programme dans une commande bash
s'ils te paient, alors ils doivent avoir droit à une formation à la prise en main de ton programme.
le programme fait ceci et/ou cela quand on lui donne des données dans le format spécifié. sinon, évidemment, il ne fonctionne pas
nous n'allons pas ré-écrire le programme pour chaque utilisateur qui préfère réunir les données d'une manière ou d'une autre.
même si tu l'as payé, un ouvre-boîte ne fonctionnera que si tu t'en sers selon la façon dont il a été conçu.
si tu tapes avec sur la boîte, ou que tu le frottes sur les côtés, ben, il n'ouvrira pas la boîte ! et ouais, ça marchera pas, pas comme ça. ![]()
Dernière modification par Watael (Le 01/06/2026, à 18:02)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#17 Le 01/06/2026, à 18:40
- BrunoL
Re : [Résolu] Insérer programme dans une commande bash
Parfait merci Watael.
La formation ils l'auront mais c'est en forgeant ... et je me demande si le meilleur apprentissage n'est pas de faire les erreurs de comprendre que c'en est et donc de se former ... sur le tas. Je crois qu'en pratique nous passons tous par ces 2 stades de maîtrise.
Une école de modestie et d'empathie ![]()
Bonne fin de journée.
Hors ligne