タグ付けされた質問 「xargs」

13
入力行ごとにxargsにコマンドを1回実行させる
与えられた入力の各行に対して、xargsにコマンドを1回だけ実行させるにはどうすればよいですか?デフォルトの動作では、行を分割してコマンドを1回実行し、各インスタンスに複数の行を渡します。 http://en.wikipedia.org/wiki/Xargsから: / path -type f -print0 | xargs -0 rm この例では、findはxargsの入力にファイル名の長いリストをフィードします。次に、xargsはこのリストをサブリストに分割し、サブリストごとにrmを1回呼び出します。これは、この機能的に同等のバージョンよりも効率的です。 / path -type f -exec rm '{}'を検索します\; findに "exec"フラグがあることを知っています。私は別のリソースからの実例を引用しています。
341 xargs 

10
xargsで複数のコマンドを実行する
cat a.txt | xargs -I % echo % 上記の例では、xargsがecho %コマンド引数として使用されます。しかし、場合によっては、引数を処理するために、1つではなく複数のコマンドが必要になります。例えば: cat a.txt | xargs -I % {command1; command2; ... } しかし、xargsはこの形式を受け入れません。私が知っている1つの解決策は、コマンドをラップする関数を定義できることですが、それはパイプラインではないため、私はそれを好みません。別の解決策はありますか?
310 bash  xargs 

12
xargsにスペースを含むファイル名を処理させる
$ ls *mp3 | xargs mplayer Playing Lemon. File not found: 'Lemon' Playing Tree.mp3. File not found: 'Tree.mp3' Exiting... (End of file) 「Lemon Tree.mp3」ファイルにスペースが含まれているため、xargsが2つのファイルであると見なしてコマンドが失敗します。このようなファイル名でfind + xargsを機能させることはできますか?
252 shell  find  xargs 

22
xargsを使用して、名前にスペースと引用符が含まれているファイルをコピーするにはどうすればよいですか?
ディレクトリの下に一連のファイルをコピーしようとしていますが、いくつかのファイルの名前にはスペースと単一引用符が含まれています。私は一緒に文字列にしようとするfindとgrepしてxargs、私は次のエラーを取得します: find .|grep "FooBar"|xargs -I{} cp "{}" ~/foo/bar xargs: unterminated quote xargsをより堅牢に使用するための提案はありますか? これは、BSDを搭載したMac OS X 10.5.3(Leopard)にありxargsます。

6
stdin入力が空の場合、xargsコマンドを無視するにはどうすればよいですか?
次のコマンドを検討してください。 ls /mydir/*.txt | xargs chown root 目的は、すべてのテキストファイルの所有者mydirをroot に変更することです 問題は、その中に.txtファイルがない場合、mydirxargsはパスが指定されていないというエラーを表示することです。これはエラーがスローされるため無害な例ですが、ここで使用する必要があるスクリプトのように、空白のパスが現在のディレクトリであると見なされる場合があります。そのため、そのコマンドを実行した/home/tom/場合、結果がなく、そのls /mydir/*.txt下のすべてのファイルの/home/tom/所有者がルートに変更されます。 それで、どうすればxargsに空の結果を無視させることができますか?
188 bash  centos  xargs 

4
xargsを使用したシェル関数の呼び出し
xargsを使用して、より複雑な関数を並列に呼び出そうとしています。 #!/bin/bash echo_var(){ echo $1 return 0 } seq -f "n%04g" 1 100 |xargs -n 1 -P 10 -i echo_var {} exit 0 これはエラーを返します xargs: echo_var: No such file or directory これを達成するためにxargsをどのように使用できるか、またはその他の解決策に関するアイデアがあれば歓迎します。
168 bash  sh  xargs 

3
>をxargsコマンドで使用するには?
ディレクトリ内のすべてのファイルをgrepして、そのgrepの出力を別のファイルに書き込むbashコマンドを見つけたいと思います。私の推測はこのようなことをすることでした ls -1 | xargs -I{} "grep ABC '{}' > '{}'.out" しかし、私の知る限り、xargsは二重引用符が好きではありません。ただし、二重引用符を削除すると、コマンドはコマンド全体の出力を、一連の個々のファイルではなく、「{}」。outという単一のファイルにリダイレクトします。 xargsを使用してこれを行う方法を誰かが知っていますか?このgrepシナリオをxargsの問題を説明する例として使用したので、xargsを使用しない解決策は私には適切ではありません。
160 bash  redirect  xargs 

2
xargsを使用してプログラムを並行して実行する
私は現在、現在のスクリプトを持っています。 #!/bin/bash # script.sh for i in {0..99}; do script-to-run.sh input/ output/ $i done xargsを使用して並行して実行したいと思います。私が試してみました script.sh | xargs -P8 ただし、上記の実行は一度に1回だけ実行されます。-n8でも運がありません。スクリプトのforループで実行される行の最後に&を追加すると、スクリプトを一度に99回実行しようとします。一度に8つだけ、合計100までループを実行するにはどうすればよいですか。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.