Soluzione 1:
GNU xargs (predefinito su Linux; installa findutils
da MacPorts su OS X per ottenerlo) supporta -d
che ti consente di specificare un delimitatore personalizzato per l'input, quindi puoi fare
ls *foo | xargs -d '\n' -P4 foo
Soluzione 2:
Qualcosa sulla falsariga di
alias myxargs='perl -p -e "s/\n/\0/;" | xargs -0'
cat nonzerofile | myxargs command
dovrebbe funzionare.
Soluzione 3:
Con Bash, in genere preferisco evitare xargs per qualsiasi cosa meno complicata, a favore dei cicli while-read. Per la tua domanda, while read -ar LINE; do ...; done
fa il lavoro (ricorda di usare la sintassi dell'array con LINE, ad esempio, ${LINE[@]}
per tutta la linea). Questo non ha bisogno di trucchi:di default read usa solo \n
come carattere di terminazione di riga.
Dovrei pubblicare una domanda su SO sui pro e i contro di xargs rispetto ai loop while-read... fatto!
Soluzione 4:
$ echo "1\n2 3\n4 5 6" | xargs -L1 echo "#"
# 1
# 2 3
# 4 5 6