1

rsyncコマンドのプログレスバー出力を解析しようとしています。rsyncプログレスバーのパーセンテージデータを使用して、ダイアログゲージユーティリティに表示したいと思います。

rsyncプログレスバーのデータは次のようになります。

32768   0%    0.00kB/s    0:00:00  
   330563584   8%  315.22MB/s    0:00:11

これまで、sedでデータを抽出しようとしました。

rsync -a --progress test.tar.gz /media/sdb1 \
    | sed -u -E 's/(^|.*[^0-9])([0-9]{1,3})%.*/\2/p' 

一人で最終値100を得ることができます。中間値を取得できません。

4

2 に答える 2

4

この答え[1]は、私を最終的に主要な問題に導きました。なぜ私が期待したように何も機能しなかったのですか。

これにより、次のスニプレットは、解析のために持つことができるすべての出力を提供します。「最終」行(たとえば、100%だけでなく、考慮すべきxxxファイル)だけでなく、^Mで区切られた中間の行もあります。

/usr/bin/rsync --info=progress2 --no-i-r -avr /foo /boar | \
 gawk '1;{fflush()}' RS='\r|\n' | \
while read -r i
do
 echo Got: -$i-
done

元の回答の行末の区切りに関する注意事項に注意してください。

[1]シェル内のキャリッジリターンのリアルタイム削除

于 2017-10-30T10:50:26.503 に答える
1

私はこの問題の可能な解決策を見つけました。それは次のように行うことができます:

    rsync -a --progress test.tar.gz /media/sdb1 |
    unbuffer -p grep -o "[0-9]*%" | 
    tr -d '%
于 2012-08-22T19:46:42.553 に答える