J'ai essayé de comprendre l'utilisation de xargs
et j'ai fait l'expérience suivante.
ls | xargs | touch
Je veux rafraîchir les dates des files et directoris dans le directory curent.
Bien que ce soit un peu bête , car je pourrais utiliser une forme plus simple pour get le même effet.
Dans mon esprit, xargs
lit le STDIN
et le convertit en arguments pour l'autre command ( /bin/echo
par défaut si la command n'est pas spécifiée). Suis-je mal compris?
Il a échoué et je me request pourquoi.
Il doit être comme ceci:
ls | xargs touch
La command xargs
exécute la command touch
avec un certain nombre de strings lues depuis stdin. Dans votre cas, stdin pour xargs
est la sortie de la pipe de ls
.
La façon dont vous aviez la command:
ls | xargs | touch
xargs
n'avait pas de commands pour courir contre les strings (noms de files) qu'il lirait depuis stdin. Dans ce cas, xargs
imprime simplement chaque nom de file et touch
la list des noms de files sur son input standard. Mais le touch
ne lit pas à partir de son input standard, et puisque vous ne lui avez pas donné d'arguments, il aurait dû imprimer un message d'erreur comme:
touch: missing file operand Try `touch --help' for more information.
(que vous auriez dû mentionner dans votre question).