Pourquoi l'utilisation de xargs a-t-elle échoué dans ce cas?

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).