xargsはどのようなコマンドを実行できますか?

xargsはどのようなコマンドを実行できますか?

findutilsマニュアルから:

xargs [option...] [command [initial-arguments]]

異なるパラメータシーケンスを使用して複数回xargs実行するのは正しいですか?command

それでは、そのようなコマンドは、コマンドに適用される引数の順序が次のようになることを満たす必要があるという意味ですか?実際に

  • パラメータシーケンスをサブシーケンスに分割し、

  • 別の実行で各パラメータのサブシーケンスでコマンドを実行しますか?

mycommandたとえば、次のように実行できる場合はxargs正しいですか?

mycommand arg1 arg2 arg3

実際に関係があるはずです。

mycommand arg1
mycommand arg2 arg3

上記の条件が注文の実行に必要で十分ですかxargs

上記の条件を満たさない命令がありますか? (見つかりません。)もしそうなら、実行は可能ですかxargs

渡されるパラメータは、オプション、オプションパラメータ、またはオプション以外のパラメータなど、任意の種類のパラメータにxargsできますか?commandこの質問は上記の質問に答えるのに役立つと思います。

それでは-iどうなりますかxargs

ありがとうございます。

答え1

xargsがそれぞれ異なる引数シーケンスを使用して複数回実行してコマンドを実行すると思うのは正しいですか?

xargsはい(もちろん入力が繰り返されない限り)

mycommand arg1 arg2 arg3

実際に関係があるはずです。

mycommand arg1
mycommand arg2 arg3

xargs一般に、私たちはリストがどこで分割されるのかわからないので、そうです。 GNU xargsを--show-limits使用すると、すべての入力が単一のコマンド実行に適しているかどうかを確認できます。

もちろん、パラメータをセットとしてコマンドに渡す必要がある場合窒素、私たちはそれをある程度制御するために使用することができます(または-n N-n M中サイズいくつかの排水窒素)。

上記の条件を満たさない命令がありますか? (見つかりません。) もしそうなら、xargsで実行できますか?

Kusalanandaは、mv最後のパラメータが他のパラメータとは異なる方法で処理されることが問題であると述べました。実際に追加されたパラメータはxargs途中で行く必要がありますが、これを行う標準的な方法はありません。 (FreeBSD xargsは-J {}これを行うことができ、GNUはオプションで引数リストの先頭にターゲットディレクトリを渡すmvことができます。)-t dircp

これにより、(作成)が実行されるたびにアーカイブが上書きされるため、このような操作はtar -czf foo.tar.gz機能しません。代わりに(append)を使用するとこれを-c回避できますが、少なくともGNU tarは圧縮アーカイブに追加することをサポートしていません。-r-c

幸いなことに、ほとんどのユーティリティはファイルごとに機能し、最後にファイルのリストを受け入れるように設計されています。

xargsコマンドに渡される引数は、オプション、オプション引数、または非オプション引数など、任意の種類の引数にできますか?

それらは単なる文字列であり、xargsそれが何を意味するのかわかりません。一般的なファイルのリストを許可しないが、同様の入力を取得する-f filenameオプションを使用するユーティリティがある場合は、それを喜んで渡します。サイズ制限は大きな入力にもかかわらず、aとファイル名を再分割する可能性がありますが、これを追加すると、これが発生する可能性が低くなります(ファイル名の長さと実際のサイズ制限によって異なります)。xargs-f file1 -f file2 ...-f-n 100

xargsの-iが関連付けられている場合はどうなりますか?

-iGNUでは、xargsはと同じで、やや退屈に、-I {}xargs入力引数に対してコマンドを一度実行します。コマンドの途中にパラメータを入れる必要がある場合は役立ちますが、コマンドの呼び出し回数を減らすのには役に立ちません。

答え2

このxargsツールはデフォルトで標準入力からスペースで区切られたトークンを読み取り、それを指定されたプログラムのコマンドラインオプションに変換します。デフォルトでは、コマンドラインに入れるだけのトークンを使用し、そのトークンでコマンドを一度実行します。

echo 1 2 3 | xargs echo "-"
- 1 2 3

ここでxargs1、2、3を読み、実行しますecho "-" 1 2 3。何回呼び出されたのかを"-"把握するのに役立つように追加しました。echo

次のオプションを使用して、コマンドに渡される引数の数を制限できます-n

echo 1 2 3 | xargs -n2 echo "-"
- 1 2
- 3

ここではxargs、標準入力ストリームから最大2つのトークンを読み取り、次のトークンをコマンドライン引数として使用してコマンドを実行しますecho "-" 1 2。標準入力からトークンの読み取りが完了していないため、引き続き3を読み取り、EOFを見つけ、残りの引数を使用してコマンドを再実行しますecho "-" 3

調整された値はn異なる動作を提供します。

echo 1 2 3 | xargs -n1 echo "-"
- 1
- 2
- 3

編集する:Timは私が彼の質問に答えなかったと言った。私はこれに同意せず、次の答えでこれを明確に説明しようとします。

異なるパラメータシーケンスを使用して複数回xargs実行するのは正しいですか?command

私はその質問に答えた。一度または複数回実行してコマンドを実行できます。デフォルトでは、できるだけcommand少ない回数で実行しようとします(引数の長さによって制限されます)。

それでは、そのコマンドは次の条件を満たす必要があるという意味ですか?コマンドにパラメータシーケンスを適用することは、実際には(x)パラメータシーケンスをサブシーケンスに分割し、(x)各パラメータサブシーケンスを使用してコマンドを実行するのと同じです。走る?

私はその質問に答えた。トークンが長すぎる-nか、オプションによって制限されている場合は、xargsそれをサブシーケンスに分割し、そのサブシーケンスを使用してコマンドを実行してください。

上記の条件が注文の実行に必要で十分ですかxargs

これに対する明確な答えはありませんが、例から意味を推論できるという考えです。引数がcommand位置に応じて特別な意味を持つ場合、commandおそらく良い候補ではないでしょうxargs(実行可能なケースを作成できると確信していますが)。

上記の条件を満たさない命令がありますか? (見つかりません。) もしそうなら、xargsで実行できますか?

繰り返しますが、そのようなケースを作成できます(ただし推奨しません)。よく作られた例は次のとおりですmv a.txt b.txt

$ ls
a.txt
$ echo a.txt b.txt | xargs mv
$ ls
b.txt

xargsコマンドに渡される引数は、オプション、オプション引数、または非オプション引数など、任意の種類の引数にできますか?この質問は上記の質問に答えるのに役立つと思います。

スペースで区切られたトークンとして読み込まれます。これは、スペースで区切られた引数としてコマンドに渡されます。これは次のように実行されますls -l

$ echo -l | xargs ls
total 0
-rw-r----- 1 user group 0 Jun 7 15:16 b.txt

それでは-iどうなりますかxargs

まあ、私は質問に答えていませんが、これに関してあなたが何を求めているのかよく理解していません。

関連情報