我很惊讶地发现这一点:
$ 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,如果相关的话。)
答案1
和GNU xargs,您可以使用-d
选项:
$ echo 1 2 3 4 5 | xargs -n 1 -d" " -I FOO echo FOO
1
2
3
4
5
答案2
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 ...
答案3
不幸的是,
echo 1 2 3 4 5 | xargs -n 1 -d" " -I FOO echo FOO
从 cuonglm 的答案来看,不知何故又创建了一个空行并执行命令 6 次而不是 5 次。
我的解决方案是使用以下解决方法:
echo 1 2 3 4 5 | tr ' ' '\n' | xargs -I FOO echo FOO