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]实时去除shell中的回车

于 2017-10-30T10:50:26.503 回答
1

I found a possible solution to this problem. It could be done as follows:

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