Je veux savoir quelle est la différence entre cela
ls | xargs rm
ls | xargs -i{} rm {}
Les deux travaillent pour moi
Je veux savoir quelle est la différence entre cela
ls | xargs rm
ls | xargs -i{} rm {}
Les deux travaillent pour moi
Réponses:
xargs rminvoquera rmavec tous les arguments comme paramètre quitté avec des espaces.
xargs -i{} rm {}sera invoqué rm {}pour chacun des arguments et {}sera remplacé par l'argument actuel.
Si vous avez 2 arguments a.txtet b.txt, xargs rm appellera cela
rm a.txt b.txt
Mais xargs -i{} rm {}appellera
rm a.txt
rm b.txt
C'est parce que l' -ioption implique l' -L 1option qui signifie que la commande rmne prendra que la 1ligne à chaque fois. Et ici, chaque ligne ne contient qu'un seul argument.
Consultez ce lien Ideone pour en savoir plus.
rmcela n'a pas d'importance
L'option -i (équivalente à --replace) crée une sorte d'espace réservé où xargs stocke l'entrée qu'il vient de recevoir. Dans votre deuxième commande, l'espace réservé est "{}", cela fonctionne comme l'option find -exec. Une fois défini, xargs remplacera cet espace réservé par la ligne d'entrée entière. Si vous n'aimez pas le nom "{}", vous pouvez définir le vôtre:
ls | xargs -iPLACEHOLDER echo PLACEHOLDER
Dans votre cas, les deux commandes produisent le même résultat. Dans le second formulaire, vous expliquez simplement le comportement par défaut avec l'option -i.