私はこれの違いを知りたい
ls | xargs rm
ls | xargs -i{} rm {}
両方が私のために働いています
私はこれの違いを知りたい
ls | xargs rm
ls | xargs -i{} rm {}
両方が私のために働いています
回答:
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
optionが-L 1
オプションを暗黙指定するためです。これは、コマンドrm
が1
毎回行のみをとることを意味します。そして、ここで各行には引数が1つだけ含まれています。
詳細については、このIdeoneリンクをご覧ください。
rm
それは問題ではない
-iオプション(--replaceと同等)は、xargsが受信したばかりの入力を保存する一種のプレースホルダーを作成します。2番目のコマンドでは、プレースホルダーは「{}」で、find -execオプションのように機能します。定義すると、xargsはこのプレースホルダーを入力行全体に置き換えます。「{}」の名前が気に入らない場合は、独自の名前を定義できます。
ls | xargs -iPLACEHOLDER echo PLACEHOLDER
あなたの場合、両方のコマンドが同じ結果を生成しています。2番目の形式では、-iオプションを使用してデフォルトの動作を明示的にしています。