Solution 1 :
GNU xargs (par défaut sous Linux ; installez findutils
de MacPorts sur OS X pour l'obtenir) prend en charge -d
qui vous permet de spécifier un délimiteur personnalisé pour l'entrée, de sorte que vous pouvez faire
ls *foo | xargs -d '\n' -P4 foo
Solution 2 :
Quelque chose dans le sens de
alias myxargs='perl -p -e "s/\n/\0/;" | xargs -0'
cat nonzerofile | myxargs command
devrait fonctionner.
Solution 3 :
Avec Bash, je préfère généralement éviter les xargs pour tout ce qui est le moins délicat, au profit des boucles while-read. Pour votre question, while read -ar LINE; do ...; done
fait le travail (n'oubliez pas d'utiliser la syntaxe de tableau avec LINE, par exemple, ${LINE[@]}
pour toute la ligne). Cela ne nécessite aucune astuce :par défaut, la lecture utilise uniquement \n
comme caractère de fin de ligne.
Je devrais poster une question sur SO à propos des avantages et des inconvénients de xargs par rapport aux boucles de lecture... c'est fait !
Solution 4 :
$ echo "1\n2 3\n4 5 6" | xargs -L1 echo "#"
# 1
# 2 3
# 4 5 6