13

xargs によって生成されたコマンドをバックグラウンドに送信する方法を知りたいです。たとえば、

find . -type f  -mtime +7 | tee compressedP.list | xargs compress

私は試した

find . -type f  -mtime +7 | tee compressedP.list | xargs -i{} compress {} &

..そして予想外に、代わりに xargs をバックグラウンドに送信するようですか?

圧縮コマンドの各インスタンスをバックグラウンドにするにはどうすればよいですか?

4

5 に答える 5

18

--max-procs/オプションを使用して、-Pxargsターゲットをバックグラウンドで実行します。GNU xargsバージョン4.2.27のマニュアルページから:

--max-procs = max-procs、-P max-procs

一度に最大procsプロセスを実行します。デフォルトは1です。max-procsが0の場合、xargsは一度にできるだけ多くのプロセスを実行します。-nオプションを-Pとともに使用します。それ以外の場合は、1人のexecのみが実行される可能性があります。

(これを組み合わせて-n 1、圧縮するファイルごとに新しいプロセスがあることを確認することもできます)

于 2011-05-26T11:30:46.237 に答える
5

SunOS については、GNU Parallel http://www.gnu.org/software/parallel/を参照してください。

find . -type f  -mtime +7 | tee compressedP.list | parallel compress

ファイル名に ' " またはスペースが含まれていても、誤って終了しないという追加の利点があります。 -j+0 を追加すると、CPU コアごとに 1 つの圧縮が実行されます。

于 2010-06-10T18:59:42.843 に答える
1

これは、fooを含むすべてのファイルを編集したいときに機能します

grep -rl foo ./ | `xargs emacs` &

于 2010-07-02T18:19:14.047 に答える