xargs '-I副作用を解決するには、「| xargs -n 1」が必要ですか?

xargs '-I副作用を解決するには、「| xargs -n 1」が必要ですか?

私はこれを見つけて驚きました:

$ 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 FOOcuonglmの答えによると、別の空行が生成され、コマンドは5回ではなく6回実行されます。

私の解決策は、次の回避策を使用することです。

echo 1 2 3 4 5 | tr ' ' '\n' | xargs -I FOO echo FOO

関連情報