Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 解析rsync输出_Shell_Tar_Rsync - Fatal编程技术网

Shell 解析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

我正在尝试解析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]{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%;只有非常大的文件才会显示中间值。