unix复制/下载进度状态更新

时间:2015-10-21 07:09:48

标签: linux unix command command-prompt scp

当我们scp文件从一台机器到另一台机器时。它为我们提供了进度状态,其中包括以下信息:percentage completedupload ratetime to finish。使用curl选项下载文件时,-O也会发生同样的事情。

我的问题:通常输出( STDOUT )本质上是静态的,但此状态栏会不断更新in-place。命令提示如何实现此逻辑?

我的猜测:他们清除了这条线并再次重写,我正在寻找更多的信息。 (我可能错了)。

2 个答案:

答案 0 :(得分:2)

通过使用回车符(control-M)而不是行之间的换行符,可以非常简单地完成此操作。您可以自己尝试:

echo -e 'abcdef\rxxx'

其中\r是通常在字符串中输入回车的方式。上面的命令在您的终端上显示为xxxdef,因为回车 已经移回到线的开头,没有下线,并在开始时覆盖了“abc”。

您可以通过将输出捕获到文件中并查看数据来检查此scp命令。例如:

script -c 'scp /a/very/big/file someremote:'

将创建一个文件typescript,其中包含进度行的副本。您可以使用

查看此文件中的控制字符
cat -vet typescript

将显示回车符^M,即control-M,换行符为$

答案 1 :(得分:0)

这通常通过通过转义序列完成,char序列可以控制终端的不同功能。例如,请参阅ANSI escape code。存在不同的库以便携式方式处理这些库:cursesncurses等,至少在类似Unix的世界中。