xargs rm
rm
を呼び出します スペースで区切られたパラメーターとしてすべての引数を指定します。
xargs -i{} rm {}
rm {}
を呼び出します 引数と {}
のそれぞれについて 現在の引数に置き換えられます。
引数が 2 つある場合 a.txt
および b.txt
、 xargs rm
これを呼び出します
rm a.txt b.txt
しかし xargs -i{} rm {}
rm a.txt
rm b.txt
これは -i
のためです オプションは -L 1
を意味します コマンド rm
を意味するオプション 1
のみを取ります 毎回ライン。ここでは、各行に引数が 1 つだけ含まれています。
詳細については、この Ideone リンクを確認してください。
中括弧を使用すると、1 つの rm
が生成されます ファイルごとに処理します。中括弧なし、xargs
各 rm
にできるだけ多くのファイル名を渡します コマンド。
比較
ls | xargs echo
そして
ls | xargs -i echo '{}'
-i オプション (--replace と同等) は、xargs が受信したばかりの入力を格納する一種のプレースホルダーを作成します。 2 番目のコマンドでは、プレースホルダーは「{}」であり、find -exec オプションのように機能します。定義すると、xargs はこのプレースホルダーを入力行全体に置き換えます。 「{}」の名前が気に入らない場合は、独自の名前を定義できます:
<ブロック引用>ls | xargs -iPLACEHOLDER echo PLACEHOLDER
あなたの場合、両方のコマンドが同じ結果を生成しています。 2 番目の形式では、-i オプションを使用してデフォルトの動作を明示しているだけです。