Xargs

我是否需要“| xargs -n 1”來解決 xargs 的 -I 副作用?

  • September 10, 2020

我驚訝地發現這一點:

$ 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

也就是說,使用-I標誌有這個副作用:

此外,未加引號的空格不會終止輸入項;相反,分隔符是換行符。

所以我看到的解決方法是:

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

有更好的解決方法嗎?

我的實際命令行如下所示:

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

(如果相關,Ubuntu Trusty。)

使用GNU xargs,您可以使用-d選項:

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

我認為你根本不需要xargs

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

不過,除此之外,您還可以做一些其他事情:

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

或者,如果您在輸入中沒有任何引號……

IN | tr \  \\n | xargs ... the rest ...

引用自:https://unix.stackexchange.com/questions/191896