Preciso de “| xargs -n 1 ”para contornar xargs '-I side-effect?

1

Fiquei surpreso ao descobrir isso:

$ echo 1 2 3 4 5 | xargs -n 1 echo
1
2
3
4
5

$ echo 1 2 3 4 5 | xargs -n 1 -I FOO echo FOO
1 2 3 4 5

Ou seja, usar o -I flag tem esse efeito colateral:

Also, unquoted blanks do not terminate input items; instead the separator is the newline character.

Portanto, a solução que vejo é:

$ echo 1 2 3 4 5 | xargs -n 1 | xargs -n 1 -I FOO echo FOO
1
2
3
4
5

Existe uma solução melhor?

Minha linha de comando real é assim:

echo 102DRIFT 103DRIFT 104DRIFT 105DRIFT | xargs -n 1 | xargs -n 1 -I _DIR_ python process.py /SDcard/DCIM/_DIR_/ MyTrace.gpx 10

(Ubuntu Trusty, se relevante).

    
por Steve Bennett 23.03.2015 / 01:05

2 respostas

2

Com GNU xargs , você pode usar a opção -d :

$ echo 1 2 3 4 5 | xargs -n 1 -d" " -I FOO echo FOO
1
2
3
4
5
    
por 23.03.2015 / 03:47
0

Eu não acho que você precise de xargs :

for DCIM in /SDcard/DCIM/10[2-5]DRIFT/
do  python process.py "$DCIM" MyTrace.gpx 10
done

Ainda assim, há outras coisas que você pode fazer além disso:

printf 10%dDRIFT\n 2 3 4 5 | ...the rest...

Ou, se você não tiver nenhuma entrada de cotação de qualquer maneira ...

IN | tr \  \n | xargs ... the rest ...
    
por 23.03.2015 / 06:39