xargsによる進行状況の追跡


11

xargsを使用して、次のような一連の入力パラメーターに対してコマンドを実行しています。

cat <someinput> | xargs -n 1 -P 5 <somecmd>

入力ファイルは本当に長く、実行に長い時間がかかります。したがって、コマンドプロンプトが表示されるのを待っています。完了した入力引数の数の進行状況バーを表示する方法はありますか?

「バー」を使用してみましたが、常に「無限」のスループットが得られました。xargsはコマンドを実行する前に入力全体を読み取るようです。

http://i.stack.imgur.com/5Wsgx.gif

回答:


13

GNU Parallelを使用している場合は、次のコマンドを実行できます。

cat <someinput> | parallel --bar -P 5 <somecmd>

GNU Parallelは一般的なパラレライザーであり、同じマシン上で、またはsshにアクセスできる複数のマシン上で、ジョブを並行して簡単に実行できます。

4つのCPUで実行する32の異なるジョブがある場合、並列化する簡単な方法は、各CPUで8つのジョブを実行することです。

シンプルなスケジューリング

代わりに、GNU Parallelは新しいプロセスが終了するとスポーンします-CPUをアクティブに保ち、時間を節約します。

GNU並列スケジューリング

設置

個人用インストールでは、rootアクセスは必要ありません。これを行うと、10秒で完了します。

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

その他のインストールオプションについては、http://git.savannah.gnu.org/cgit/parallel.git/tree/READMEを参照してください。

もっと詳しく知る

他の例を参照してください:http : //www.gnu.org/software/parallel/man.html

イントロビデオを見る:https : //www.youtube.com/playlist?list=PL284C9FF2488BC6D1

チュートリアルをご覧くださいhttp : //www.gnu.org/software/parallel/parallel_tutorial.html

サポートを受けるには、メーリングリストにサインアップしてくださいhttps : //lists.gnu.org/mailman/listinfo/parallel


1
本当にありがとうございます(答えとソフトウェアの作成に感謝します!)、うまくいきます!
グレッグサデツキー

9

あなたはpvを使うことができます:

cat <someinput> | pv -p -s sizeof_someimput | xargs -n 1 -P 5 <somecmd>

これにより、someimputの読み取り値がどこにあるかがわかるので、someimputの処理がどこにあるかをほぼ知ることができます。


1
別のよくあるユースケースは、findとの組み合わせFIND=( find "$DIR" -type f ) && ${FIND[@]} -print0 | pv -0lps $(${FIND[@]} | wc -l) | xargs -0 -I {} -P 5 <somecmd>
です。– mxmlnkn

3

進行状況の一般的な指標のみを探している場合、最も簡単な方法は、実行するコマンドを実行する前にエコーすることです。

例: cat <someinput> | xargs -I{} sh -c 'echo {}; <somecmd>;'

-I{}{}処理中の現在の文字列に設定します

sh -c複数のコマンドを実行することができます(注:最後のコマンドを含むすべてのコマンドが必要な後のセミコロン)。

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