これの違いは何ですか?
ls | xargs rm
ls | xargs -i{} rm {}
どちらも私のために働いています
xargs rm
は、すべての引数をスペースで区切ったパラメーターとしてrm
を呼び出します。
xargs -i{} rm {}
は引数ごとにrm {}
を呼び出し、{}
は現在の引数に置き換えられます。
a.txt
とb.txt
の2つの引数がある場合、xargs rm
はこれを呼び出します
rm a.txt b.txt
しかしxargs -i{} rm {}
は
rm a.txt
rm b.txt
これは、-i
オプションが-L 1
オプションを意味するためです。つまり、コマンドrm
は毎回1
行しか使用しません。そして、ここでは各行に1つの引数しか含まれていません。
これをチェックしてください Ideone link それについてのより多くのアイデアを得るために。
中括弧を使用すると、ファイルごとに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オプションを使用してデフォルトの動作を明示的にしているだけです。