Je suis tombé sur un problème similaire et j'ai trouvé une solution qui, à mon avis, est plus belle et plus propre que celles présentées jusqu'à présent.
La syntaxe pour xargs
avec laquelle j'ai terminé serait (pour votre exemple) :
xargs -I X echo --file=X
avec une ligne de commande complète étant :
my-program $(cat input.txt | xargs -I X echo --file=X)
qui fonctionnera comme si
my-program --file=a.txt --file=b.txt --file=c.txt
a été fait (en fournissant input.txt
contient les données de votre exemple).
En fait, dans mon cas, je devais d'abord trouver les fichiers et les trier, donc ma ligne de commande ressemble à ceci :
my-program $(find base/path -name "some*pattern" -print0 | sort -z | xargs -0 -I X echo --files=X)
Quelques détails qui pourraient ne pas être clairs (ils ne l'étaient pas pour moi) :
-
some*pattern
doit être cité, car sinon l'interpréteur de commandes le développerait avant de le transmettre à find
.
-
-print0
entonces -z
et enfin -0
utiliser la séparation nulle pour assurer un traitement correct des fichiers comportant des espaces ou d'autres noms câblés.
Notez cependant que je ne l'ai pas encore testé en profondeur. Bien que cela semble fonctionner.