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 rm
invoquera rm
avec 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.txt
et 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' -i
option implique l' -L 1
option qui signifie que la commande rm
ne prendra que la 1
ligne à chaque fois. Et ici, chaque ligne ne contient qu'un seul argument.
Consultez ce lien Ideone pour en savoir plus.
rm
cela 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.