Solución 1:
Xargs de GNU (predeterminado en Linux; instale findutils
desde MacPorts en OS X para obtenerlo) admite -d
que le permite especificar un delimitador personalizado para la entrada, para que pueda hacer
ls *foo | xargs -d '\n' -P4 foo
Solución 2:
Algo parecido a
alias myxargs='perl -p -e "s/\n/\0/;" | xargs -0'
cat nonzerofile | myxargs command
debería funcionar.
Solución 3:
Con Bash, generalmente prefiero evitar xargs para cualquier cosa que sea un poco complicada, a favor de los bucles de lectura durante el tiempo. Para su pregunta, while read -ar LINE; do ...; done
hace el trabajo (recuerde usar sintaxis de matriz con LINE, por ejemplo, ${LINE[@]}
para toda la línea). Esto no necesita ningún truco:por defecto, la lectura usa solo \n
como carácter de terminación de línea.
Debería publicar una pregunta en SO sobre los pros y los contras de xargs frente a los bucles while-read... ¡hecho!
Solución 4:
$ echo "1\n2 3\n4 5 6" | xargs -L1 echo "#"
# 1
# 2 3
# 4 5 6