私はこれを見つけて驚きました:
$ 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の答えによると、別の空行が生成され、コマンドは5回ではなく6回実行されます。
私の解決策は、次の回避策を使用することです。
echo 1 2 3 4 5 | tr ' ' '\n' | xargs -I FOO echo FOO