我正在寻找一种过滤/重定向rsync输出的方式,可以将其输入到“ dialog --gauge”命令中,以便在文件同步过程中获得一个漂亮的进度条。目前,我仅在提示符下直接对其进行了测试,但我计划在(bash)shell脚本中进行此操作。
我环顾了互联网,发现了点点滴滴,但我仍然缺少使它正常工作的东西
(免责声明:这可能是完全错误的方法,并且是重定向/管道怪诞)
我目前汇总的内容:
rsync -avz --progress -e "ssh" user@server:/home/user/data/ /home/user/data | awk -f /home/user/rsync.awk | sed 's/\([0-9]*\).*/\1/' | dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70
首先,我有一个带有--progress选项的实际rsync命令。rsync的输出通过管道传递到awk中,并使用以下awk过滤器:
{
if (index($0, "to-check=") > 0)
{
split($0, pieces, "to-check=")
split(pieces[2], term, ")");
split(term[1], division, "/");
print (1-(division[1]/division[2]))*100
}
# else
# {
# print "#"$0;
# }
fflush();
}
这将滤除rsync输出并以以下格式提供百分比:
53.7037
55.5556
57.4074
59.2593
61.1111
62.963
因此,要摆脱小数,我将输出输入sed:
sed 's/\([0-9]*\).*/\1/'
给出以下输出:
64
66
68
70
72
74
75
77
这些数字将通过管道传送到对话框中,如下所示:
dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70
据我所知,“ dialog --gauge”等应该接受,但是它只会显示进度为0%,直到突然达到100%
有人可以在这里指出正确的方向吗?我离正在运行的进度栏很远吗?有没有更好的方法来实现这一目标?
问候,
克里斯特
编辑:考虑到@lynxlynxlynx'的答案后,正确的命令行是:
rsync -avz --progress -e "ssh" user@server:/home/user/data/ /home/user/data \
| awk -f /home/user/rsync.awk \
| sed --unbuffered 's/([0-9]*).*/\1/' \
| dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70
1
听起来有些东西(可能是awk)正在缓冲输出,直到流水线中的程序发送EOF为止。邓诺
—
Dunno)