Shell 解析rsync输出
我正在尝试解析rsync命令的进度条输出。我想使用rsync进度条中的百分比数据,并将其显示在对话框仪表实用程序上 rsync进度条数据如下所示:Shell 解析rsync输出,shell,tar,rsync,Shell,Tar,Rsync,我正在尝试解析rsync命令的进度条输出。我想使用rsync进度条中的百分比数据,并将其显示在对话框仪表实用程序上 rsync进度条数据如下所示: 32768 0% 0.00kB/s 0:00:00 330563584 8% 315.22MB/s 0:00:11 到目前为止,我已尝试提取数据: rsync -a --progress test.tar.gz /media/sdb1 \ | sed -u -E 's/(^|.*[^0-9])([0-9
32768 0% 0.00kB/s 0:00:00
330563584 8% 315.22MB/s 0:00:11
到目前为止,我已尝试提取数据:
rsync -a --progress test.tar.gz /media/sdb1 \
| sed -u -E 's/(^|.*[^0-9])([0-9]{1,3})%.*/\2/p'
仅我就能够获得最终值100。我无法获得中间值 我找到了解决这个问题的可能办法。可按以下方式进行:
rsync -a --progress test.tar.gz /media/sdb1 |
unbuffer -p grep -o "[0-9]*%" |
tr -d '%
我找到了解决这个问题的可能办法。可按以下方式进行:
rsync -a --progress test.tar.gz /media/sdb1 |
unbuffer -p grep -o "[0-9]*%" |
tr -d '%
这个答案[1]最终把我引向了一个主要问题,即为什么没有任何东西能按我预期的方式工作 有了它,下面的sniplet将为您提供解析所需的所有输出。最后的行,例如100%,但也要考虑的XXX文件,中间的东西只与^ m < /p >分开。
/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] 这个答案[1]最终让我想到了一个主要问题,为什么没有任何东西能按我预期的方式工作 有了它,下面的sniplet将为您提供解析所需的所有输出。最后的行,例如100%,但也要考虑的XXX文件,中间的东西只与^ m < /p >分开。
/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] 除非您使用bash read命令而不是sed命令明确拒绝回答,否则您为什么这样问?@CharlesDuffy我尝试使用sed,因为我在搜索过程中找到了。如果您尝试传输多个文件,这可能是一个解决方案。我正在尝试传输单个大文件。我认为sed或awk命令是最好的选择。rsync是否在进度行之间实际输出\n,或者只是\r\n?如果是后者,sed肯定是作业的错误工具。@ephemient是,它使用CR和LF字符。我目前正在尝试将数据捕获到一个文本文件中,逐行读取,并使用cut命令捕获百分比数据。有更好的方法吗?我可以通过管道传输数据来实现这一点吗?也就是说:如果一个文件太小,以至于在一次系统调用中被传输,那么它将直接传输到100%;只有非常大的文件才会显示中间值。除非您使用bash read命令而不是sed显式拒绝回答,否则您为什么这样问?@CharlesDuffy我尝试使用sed,因为我在搜索过程中找到了它。如果您尝试传输多个文件,这可能是一个解决方案。我正在尝试传输单个大文件。我认为sed或awk命令是最好的选择。rsync是否在进度行之间实际输出\n,或者只是\r\n?如果是后者,sed肯定是作业的错误工具。@ephemient是,它使用CR和LF字符。我目前正在尝试将数据捕获到一个文本文件中,逐行读取,并使用cut命令捕获百分比数据。有更好的方法吗?我可以通过管道传输数据来实现这一点吗?也就是说:如果一个文件太小,以至于在一次系统调用中被传输,那么它将直接传输到100%;只有非常大的文件才会显示中间值。