解析rsync输出

时间:2012-08-20 19:35:10

标签: shell tar rsync

我正在尝试解析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。我无法获得中间值。

2 个答案:

答案 0 :(得分:2)

这个答案[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] Realtime removal of carriage return in shell

答案 1 :(得分:0)

我找到了解决这个问题的可能方法。它可以按如下方式完成:

    rsync -a --progress test.tar.gz /media/sdb1 |
    unbuffer -p grep -o "[0-9]*%" | 
    tr -d '%