3

内で進行状況を追跡または監視する方法はありますxargsか?

forループをfor performanceに置き換えていますfind … | xargs(特にタスクを並行して実行するため)。進行状況フラグがあることを読みましたparallelが、これを厳密に使用して達成する方法があるかどうか疑問に思っていましたxargs

また、並行して実行されるタスクがxargs必ずしも正しい順序で終了するとは限らないことも認識しています。これにより、進行状況の監視が複雑になります。解決策が進行状況の一般的なアイデアを私に与えたとしても、それは素晴らしいスタートになるでしょう.

4

3 に答える 3

3

既に大まかに処理した行数を入力したいだけの場合は、それを行うための簡単なシェル関数を作成できます。

#!/bin/bash

#-----
##
## @function count
##
## @desc Write every n'th number (if n is 5 write 5, 10, 15, ...)
##
## @param $1 - number 
##
#-----
function count {
   typeset C=0
   while read L; do
      C=$(( C + 1 ))
      if [ $(( $C % $1 )) -eq 0 ]; then
         echo $C 1>&2
      fi
      echo "$L"
   done
}

find . | count 100 | xargs ...

小さな問題は、xargs によって呼び出されたコマンドによって既に処理された行数ではなく、xargs に渡された行数が出力されることです。さらに、すべてのパイプにはバッファがあるため、本来よりもわずかに高い数値が表示されます。私のマシンでは、実際の状態に先立って〜500行を示しましたが、十分に多数の行を処理している場合、500は無視できます:)

于 2013-05-10T21:02:22.850 に答える
2

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

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

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

sh -c複数のコマンドを実行できます (注:最後のコマンドを含め、すべてのコマンドの後にセミコロンが必要です。

于 2017-01-23T03:54:24.553 に答える
0

パイプを監視するために使用できますがpv(ファイルに関してではありませんが、パイプ内にあるため)、pv非常に面倒な検索出力のサイズを指定する必要があります (この回答を参照してください)。

あなたが達成しようとしていることに基づいて、を使用することを本当にお勧めしparallelます...これはまさにそれが設計されたものです。

それ以外の場合は、Apple Developer Tools がインストールされている場合は、Makefile を生成して同じタスクを実行し、希望する方法で進行状況を表示する小さなスクリプトを作成できます。

于 2013-04-03T17:36:19.657 に答える