Bonjour, j'aimerais utiliser la sortie d'un programme écrit en Python3 pour que ce programme donne au shell une liste de fichiers, que le shell récupère cette liste via un pipe et que je puisse placer une commande shell sur cet ensemble de fichiers.
Quelque chose comme ça (si je veux chercher une chaîne de caractères dans les fichiers) :
./script.py | grep -rHn --color "string" {} \;
Je n'arrive pas à le faire. Pourriez-vous me donner un lien, une piste ou me proposer un exemple ?
Merci !
# entrée standard et arguments
Posté par Patrick Nicolas . Évalué à 8. Dernière modification le 22 septembre 2015 à 14:33.
Que je sache, grep n'ouvre les fichiers que depuis ses arguments en ligne de commande. Ici il va donc chercher un fichier {} et un ;
La syntaxe que tu essayes d'utiliser est celle de find, c-à-d find commande {} \;, c'est find qui va lancer commande en remplaçant le {} par le fichier en cours.
Pour des fichiers sans espace, on peut simplement utiliser grep string $(./script.py)
Avec cette syntaxe le shell va d'abord exécuter ce qui est entre $() et passer la sortie de ce programme comme arguments pour la commande grep.
Une solution plus générale est d'utiliser xargs (la page de man décrit tout ce qui est possible) pour lancer une commande pour chaque ligne de l'entrée standard.
[^] # Re: entrée standard et arguments
Posté par Xavier Faure (site web personnel) . Évalué à 1.
D'accord, merci !
Trust the Python !
[^] # Re: entrée standard et arguments
Posté par Xavier Combelle (site web personnel) . Évalué à 1.
par défaut
xargs
lance une commande avec chaque ligne d'entrée comme étant un argument supplémentaire à la commande# xargs ou parallel
Posté par steph1978 . Évalué à 2.
regarde du côté de xargs, en standard sur la majorité des systèmes (package findutils)
plus puissant, gnu parallel, à installer depuis le système de gestion de package de ta distribution.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.