Par défaut xargs
concaténera de nombreuses lignes de son entrée et passera ensuite à la commande spécifiée. Par exemple:
echo -e 'line 1\nline 2\nline 3' | xargs echo
résulte en
line 1 line 2 line 3
Puisque les arguments sont envoyés à une seule commande echo (dans les limites de la longueur de la ligne de commande).
Parfois, vous souhaitez utiliser une chaîne de remplacement pour placer les arguments ailleurs dans la commande, plutôt que la fin:
echo -e 'line 1\nline 2\nline 3' | xargs -Ix echo x DONE
line 1 DONE
line 2 DONE
line 3 DONE
À présent, xargs n'a substitué qu'un argument à chaque invocation d'écho, car comme le dit la page de manuel "-I implique -L 1 ...". C’est probablement le bon comportement pour un cas typique, mais existe-t-il un moyen de le remplacer, alors je reçois line 1 line 2 line 3 DONE
comme sortie?
Veuillez noter que mon exemple est uniquement illustratif - je ne suis pas très intéressé par les moyens non xargs de traiter ce problème.
Convertir les nouvelles lignes en
\nul
terminateurs, puis utilisezxargs -0
la source
line 1 DONE line 2 DONE ...
Si je comprends votre question, je pense que vous voulez simplement convertir les nouvelles lignes en non-délimiteur.
la source
ls | tr '\n' ' ' | xargs -I{} echo {} DONE
les rendementsdir1/ dir2/ dir3/ DONE
.