Linuxでのxargsの中括弧となしのdiff bentweenの違い


18

私はこれの違いを知りたい

ls | xargs rm

ls | xargs -i{} rm {}

両方が私のために働いています

回答:


19

xargs rmrmスペースで区切られたパラメーターとして、すべての引数で呼び出します。

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

これは、-ioptionが-L 1オプションを暗黙指定するためです。これは、コマンドrm1毎回行のみをとることを意味します。そして、ここで各行には引数が1つだけ含まれています。

詳細については、このIdeoneリンクをご覧ください。


どちらが優れている

1
@ user19140477031は、実行する操作に依存します。以下のためのrmそれは問題ではない
Shiplu Mokaddim

3

中括弧を使用すると、rmファイルごとに1 つのプロセスが生成されます。中括弧なしで、xargsrmコマンドにできるだけ多くのファイル名を渡します。

比較する

ls | xargs echo

そして

ls | xargs -i echo '{}'

2

-iオプション(--replaceと同等)は、xargsが受信したばかりの入力を保存する一種のプレースホルダーを作成します。2番目のコマンドでは、プレースホルダーは「{}」で、find -execオプションのように機能します。定義すると、xargsはこのプレースホルダーを入力行全体に置き換えます。「{}」の名前が気に入らない場合は、独自の名前を定義できます。

ls | xargs -iPLACEHOLDER echo PLACEHOLDER

あなたの場合、両方のコマンドが同じ結果を生成しています。2番目の形式では、-iオプションを使用してデフォルトの動作を明示的にしています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.