监控Rsync进度

时间:2011-08-23 08:07:36

标签: python progress rsync

我正在尝试编写一个Python脚本来监视rsync传输,并提供(粗略)估计百分比进度。对于我的第一次尝试,我查看了一个rsync --progress命令,看到它打印的消息如下:

1614 100%    1.54MB/s    0:00:00 (xfer#5, to-check=4/10)

我为这些消息编写了一个解析器,并使用了to-check部分来产生一个百分比进度,在这里,这将完成60%。

然而,这有两个缺陷:

  • 在大转移中,检查分数的“分子”似乎没有单调减少,因此百分比完整性可以向后跳跃。
  • 不会为所有文件打印此类消息,这意味着进度可以向前跳转。

我已经看过要使用的其他替代消息,但还没有设法找到任何东西。有没有人有任何想法?

提前致谢!

4 个答案:

答案 0 :(得分:28)

当前版本的rsync(在编辑3.1.2时)有一个选项--info=progress2,它将显示整个传输的进度而不是单个文件。

来自the man page

  

还有一个--info = progress2选项,它根据整个传输输出统计信息,而不是单个文件。使用此标志而不输出文件名(例如,如果你想看看转移是如何进行的,而不是用很多名字滚动屏幕,请避免-v或指定--info = name0。(你不需要指定--progress选项,以便使用--info = progress2。)

因此,如果可能,在您的系统上,您可以将rsync升级到包含该选项的当前版本。

答案 1 :(得分:8)

您可以使用参数--no-inc-recursive禁用增量递归。 rsync将对整个目录结构进行预扫描,因此它知道它必须检查的文件总数。

这实际上是它递归的旧方式。增量递归(当前默认值)已添加为速度。

答案 2 :(得分:5)

请注意,即使--info=progress2 完全可靠,因为这是基于rsync 知道的文件数量时的百分比。进展正在显现。这不一定是需要同步的文件总数(例如,如果它在深层嵌套目录中发现大量大文件)。

确保--info=progress2在进度指示中跳回的一种方法是强制rsync在开始同步之前递归扫描所有目录(而不是默认行为)通过提供--no-inc-recursive选项来进行递增递归扫描。但请注意,此选项还会增加rsync内存使用量和运行时间。

答案 3 :(得分:0)

要完全控制传输,您应该使用更低级别的差异工具,并自行管理目录列表和数据传输。

基于librsync,有命令行rdiff或python模块pysync