Je veux savoir quelle est la différence entre cela
ls | xargs rm
ls | xargs -i{} rm {}
Les deux travaillent pour moi
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'importanceAvec les accolades, il engendrera un
rm
processus par fichier. Sans les accolades,xargs
passera autant de noms de fichiers que possible à chaquerm
commande.Comparer
et
la source
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:
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.
la source