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 dir
cp
これにより、(作成)が実行されるたびにアーカイブが上書きされるため、このような操作は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が関連付けられている場合はどうなりますか?
-i
GNUでは、xargsはと同じで、やや退屈に、-I {}
各xargs
入力引数に対してコマンドを一度実行します。コマンドの途中にパラメータを入れる必要がある場合は役立ちますが、コマンドの呼び出し回数を減らすのには役に立ちません。
答え2
このxargs
ツールはデフォルトで標準入力からスペースで区切られたトークンを読み取り、それを指定されたプログラムのコマンドラインオプションに変換します。デフォルトでは、コマンドラインに入れるだけのトークンを使用し、そのトークンでコマンドを一度実行します。
echo 1 2 3 | xargs echo "-"
- 1 2 3
ここでxargs
1、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
?
まあ、私は質問に答えていませんが、これに関してあなたが何を求めているのかよく理解していません。