このfind
コマンドには、特定のxargs
アクションスタイルを実行する2つの方法があります。
find foo -exec bar '{}' baz ';'
find foo -exec bar '{}' baz '+'
違いは、1つ目は見つかった各ファイルを1回実行し、2つ目はファイルをグループ化して実行回数を減らすことです。
私が見ると、xargs
次のスイッチがあります-I
。
xargs -I{} foo bar {} baz
これは各パラメータに対して一度だけ実行されます。
質問:
で実行xargs
回数を減らす方法はありますかfind
?
私はこのようなことをしたい:
xargs -I{} echo start {} end << EOF
hello
world
EOF
結果を得る:
start hello world end
いいえ:
start hello end
start world end
答え1
これを行う唯一の方法は、コマンド用の単純なラッパースクリプトを作成することです。
#!/bin/sh
echo start "$@" end
それからあなたは利用可能ですxargs echo-wrapper
もちろん、これをインラインで実行することもできます。
xargs sh -c 'echo start "$@" end' sh <<EOF
hello
world
EOF
sh
最後に追加情報を参照してください。これはsh -c
、シェルが内部的に指定する構文の一部です。$0